一、二叉树的概念
二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。
二、二叉树的遍历方式(理解遍历的嵌套关系,层的概念)
a.前序(根左右):先由根节点出发,遍历根节点的左子树(左子树的遍历方式为前序遍历),再遍历根节点的右子树(右子树的遍历方式为前序遍历)
b.中序(左根右):根节点分为左子树和右子树,先遍历左子树(右序遍历),然后回到根节点,再遍历右子树(右序遍历)
c.后续(左右根):根节点分为左子树和右子树,先遍历左子树(后序遍历),再遍历右子树(后序遍历),最后回到根节点
在上述遍历过程中,每遇到一个根节点,根节点与两棵子树就构成了一层的结构,对每一层都要有前序、中序和后序的概念,这样就会很容易理解三种遍历方式。
三、例子:已知前序、中序,写出后序遍历
前序:ABCDEFGHK
中序:BDCAEHGKF
解题思路:
a.根据前序、中序画出二叉树构建图
b.根据二叉树图写出后序遍历
1.根据前序(根左右)和中序(左根右)的遍历特点可以知道第一个根节点为A
2.已知第一个根节点为A,根据中序遍历的特点(左根右)BDCAEHGKF,可知第一个根节点的左子树有BDC三个节点,右子树有EHGKF五个节点
3.现在只看A根节点的左子树的前序遍历BCD和中序遍历BDC可知,B是A的左子树的根节点且B没有左子树,而B的右子树的根节点为C,C左节点为D,没有右节点(到此A的左子树构建完成)
4.同理可以构建A的右子树,根据A根节的右子树的前序遍历EFGHK和中序遍历EHGKF可知,E是A的右子树的根节点且E没有左子树。现在看E的右子树,因为E的右子树的前序为FGHK,中序为HGKF,可知F是E的右子树的根节点,且F在E的中序的最后一位,所以F只有左子树,且F的左子树的根节点为G,剩下的就很好判断,G的左子树为H,右子树为K,下图为根据前序和中序构建完成的二叉树。
根据二叉树图和后序的构建方法,很容易就可以得出后序遍历(补位法)
1.首先知道该二叉树为9个节点,所以写下— — — — — — — — —
2.根据二叉图可知第一层的根节点为A,所以最后以为为A即— — — — — — — — A
3.根据A的左子树有三个节点,且可以知道前三位为左子树,且B为A的左子树的根节点,所以前三位的最后一位是B,同理可知B的右子树的根节点为C,所以前三位的倒数第二位为C,即DCB — — — — — A
4.同理很容易得到A的右子树所以二叉树的后序遍历为DCBHKGFEA