二叉树遍历这个问题,以前一直没搞懂,只是模糊的了解。
先序遍历:先访问根节点,再从左到右依次访问各子树。ABDECFG
中序遍历:先访问左节点,再访问根节点,最后再访问右节点。DBEACGF
后序遍历:先从左到右遍历各棵子树,再访问根节点。DEBGFCA
先中后实际上对应的是根遍历的位置。
层次遍历:按层次从小到大逐个访问,同一层次按照从左到右。ABCDEFG
这里中序难度要稍微大些,就以中序举个例子。
中序遍历:先访问左节点,再访问根节点,最后再访问右节点。DBEACGF
中序难一些,就以中序举例,获取序列。
1、从根节点开始往下查找,A有左子树B,B也有左子树D,D没有左子树,输出D。
2、回头找到根节点B,输出B,查到B的右节点E,E没有左右子树,输出E。
3、回头找到A,输出A,查到A的右节点C,C没有左子树,输出C。
4、查到C的右子树F,F有左节点G,输出G,回头输出F。
总结一句话:有左子树的时候,要先拿左子树。
确定二叉树:
已知前序遍历和中序遍历,可以确定唯一一棵二叉树。
确定方式:利用先序遍历确定根结点,再利用中序遍历划分左右子树。
已知后序遍历和中序遍历,可以确定唯一一棵二叉树。
确定方式:利用后序遍历确定根结点,再利用中序遍历划分左右子树。
已知前序遍历和后序遍历,不可以确定唯一一棵二叉树。
先序遍历:先访问根节点,再从左到右依次访问各子树。ABDECFG
中序遍历:先访问左节点,再访问根节点,最后再访问右节点。DBEACGF
如上已知先序和中序,先确定二叉树。
1、先序确定根节点,第一个根节点为A。则根据中序,得到A的左子树有DBE,A的右子树有CGF。
2、DBE进行下层拆解。根据先序BDE,得到根节点为B,通过中序,B的左子树D,右子树E。
3、CGF进行下层拆解。根据先序CFG,确定根节点为C,通过中序,C的左子树空,右子树GF。
4、GF进行下层拆解。根据先序FG,F为根节点。根据中序,F的左子树为G,右子树空。