我们知道二叉树的遍历用三种方式,分别是先序遍历、中序遍历和后序遍历。


那这里我们先来看先序遍历的伪算法: 1.先访问根节点 2.再先序访问左子树 3.再先序访问右子树 在这里我们需要注意的是先序两个字,以下图为例:image.png

这里很显然A是根结点,根据先序遍历的话,访问完A之后,就访问B了,而又因为B子树也是一个树,所有又要先序访问B,即先访问B的根节点,再先序访问B的左节点和右节点,这个先序就是我们要注意的地方。 访问到B之后,就要再访问D,因为D也要先序访问,所以就要再先序访问G,而G后面没有子树了,就意味着D的左子树已经访问完了,又因为D没有右子树,也就意味着B的左子树已经访问完了,然后开始访问B的右子树E,E没有左节点,所以直接访问到了H,H访问完,也就移位着E的右结点访问完了,也就意味着B的右结点E访问完了,也就意味着A的左节点B访问完了。 这个时候开始访问A的右结点C,C没有左节点,所以就直接访问了C的右结点F,F访问完,就意味着C的右结点访问完,也就意味着A的右结点C访问完,到此为止,整个先序访问都完成了。 所以这个先序遍历的顺序就是:ABDGEHCF。


同样的中序和后序都是这样一个道理,还是这个图。image.png

我们先来看一下中序遍历的伪算法: 1.中序遍历左子树, 2.再访问根节点, 3.再中序遍历右子树 所以我们要先访问B,由于B也是一颗树,所以我们要先访问D,D也是一棵树啊,所以我们还要先访问D的左子树G,由于G没有子节点,所以G访问完了,就访问D,再访问D的右子树,D没有右子树,所以整个D也就访问完了,这个时候就访问B,再访问B的右子树,这里就不一一赘述了,原理都是一样的,先左再中再右。 所以中序遍历的结果是:GDBEHACF


后序遍历也是如此,先看伪算法: 1.后序遍历左子树 2.后序遍历右子树 3.再访问根节点 image.png

后序遍历就是先左再右再中,所以这个树后序遍历的结构是:GDHEBFCA.

下面是实现下图二叉树遍历的代码: image.png


image.pngimage.pngimage.pngimage.png