已知先序遍历和中序遍历求后序遍历,或已知中序遍历和后序遍历求先序遍历。
一、说明
已知任何一种遍历结果都不能推算出二叉树原来的结构,只有知道先序遍历和终须遍历的结果或者中序遍历和后序遍历的结果才能做到。
二、已知先、中序遍历
举例
先序遍历:ABCDEFGH
中序遍历:BDCEAFHG
- 先序遍历第一个一定是根节点,由此得出根节点是 A
- 中序遍历先遍历左子树,再到根节点,然后是右子树。根节点是 A ,所以 BDCE 是左子树,FHG 是右子树。
- BDCE 也是一棵树,先序遍历中首先出现的是 B ,由此可知 B 是左子树的根节点。
- 再看中序遍历的 BDCE ,根节点 B 的左边没有元素说明 B 没有左子树,而
DCE 是 B 的右子树。 - DCE 在先序遍历中最先出现的是 C ,所以 C 是 B 的右结点。
- 中序遍历中 C 的左边是 D ,右边是 E ,所以 C 的左结点是 D ,右结点是 E 。
- 其他元素按照同样的方法也可以排列好。
总结
- 已知一棵树,首先看先序遍历的结果,第一个就是根节点。
- 在中序遍历中找到根节点。
- 左边是左子树
- 右边是右子树
- 左边为空就是没有左子树
- 右边为空就是没有右子树
- 左右子树也是一棵树,按照同样的方法(根据先序遍历找出根节点,根据中序遍历找出左右子树)一直找下去就可以了。
三、已知中、后序遍历
举例
中序遍历:DEBAC
后序遍历:DABEC
- 后序遍历的顺序是先左子树,到右子树,最后是根节点。也就是跟根节点在后序遍历的最后一位–>C。
- 根据中序遍历可知,DABE 都是 C 的左子树,且没有右子树。
- 左子树的后序遍历是 DABE ,最后出现的是根节点–>E。
- 中序遍历中,E 的左边是 D ,右边是 BA ,可知 E 的左结点是 D ,右子树是 BA 。
- 剩下的 BA 在后序遍历中 B 后出现,所以 B 是 D 右子树的根节点。
- 在中序遍历中,B 的左边为空,右边为 A ,所以 A 是 B 的右结点,B 的左结点为空。
(此题先序遍历是:CEDBA)
总结
- 从后序遍历中找出根节点。
- 在中序遍历中找出左右子树。