二叉树的先序、中序、后序遍历

记得有次被别人问起二叉树的先序遍历,竟然不清楚?当然读书的时候是知道的,工作后有点忘了,只知道它是利用栈递归遍历的,至于这里的先序的“先”,到底指的是先遍历左子树还是先遍历根节点给忘了。

为加深印象,今天打算做个小小的总结,先不管工作上有没用到(其实是有用到的,比如楼主曾经做二值图像连通算法的时候,需要对图进行遍历,可使用深度或广度,与二叉树的遍历思想类似),毕竟面试的时候,这个知识点还是会经常问起的,如果不知道,未免略显尴尬。

 

尽量简单点,也不说那么多概念了,二叉树的遍历分为两种:深度优先遍历和广度优先遍历;深度优先遍历又分为三种,先序、中序和后序。

这里,我们就不细写具体的实现代码了,理解其思想就好,所有例子都是基于以下树进行遍历的。

深度优先遍历(辅助结构:栈)

先序遍历:根节点,左子树,右子树

结果:124563

中序遍历:左子树,根节点,右子树

结果:425613

后序遍历:左子树,右子树,根节点

结果:465231

关于先序、中序、后序遍历,我只说一点:就是这里的先、中、后指的是根节点,根节点,根节点。。。。

广度优先遍历(辅助结构:队列)

很简单,结果为:123456

补充一下:广度优先遍历又叫层次遍历,感觉这个名字更加形象点,另外,每次遍历完一个节点会将它的子节点做入队操作。

 

以上个人理解:有错误请指正

posted @ 2016-06-03 11:14  风一样的码农  阅读(14139)  评论(0编辑  收藏  举报