我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324
面试的时候经常会有考察队二叉树的遍历的掌握程度,会这样出题
已知一棵二叉树的前序遍历为ABCDEF,中序遍历为CBAEDF,求后序遍历结果?这种题要根据已有的信息先推导出原二叉树,然后自然得出所求序列
1.三种遍历都是从根结点开始的,前序遍历是先打印再递归左和右 根据前序遍历的ABCDEF,第一个打印的是A,说明A是根结点的数据 在看中序遍历序列是CBAEDF,C和B是A的左子树可以确定
这时候看前序的C B, 顺序是ABCDEF,先打印的B再打印的C,所以B是A的左孩子,C是B的孩子,此时无法确定左右,在看中序CBAEDF,C在B的前边,说明C是B的左孩子
在看前序的 E D F,顺序是ABCDEF , 则D是A结点的右孩子,E和F是D的子孙,在看中序是CBAEDF,由于E在D的左侧,而F在右侧,所以可以确定E是D的左孩子,F是D的右孩子。最后得到的二叉树是如下图
有了二叉树,则后序遍历结果是CBEFDA
根据这个推导其实过程中不用画二叉树就可以得到后序序列 因为A一定是最后一个,且可以判断C是B的左孩子,而B是A的左孩子,那就意味着后序序列的前两位一定是CB,同样的方法也可以得到EFD的后序顺序,则就可以得到CBEFDA的顺序