如何根据已知两种遍历的序列,求原始的二叉树?
并不是已知道任意两个序列都可以还原二叉树,只有知道先序中序以及中序和后序两种类型的遍历顺序才能还原二叉树。只知道先序和后序是还原不了原始的二叉树的。
(1)已知道先序和中序遍历,还原二叉树。
已知道二叉树的先序遍历为ABCDEFGH,中序遍历为BDCEAFHG,求后序遍历。
先序(根,左,右) 中序(左,根,右)
①根据先序遍历可以知道根节点为A。
②根据中序遍历可以知道BDCE是二叉树的左子树。FHG是右子树。左子树BDCE,在先序遍历可以看出B先出现,为根节点,在根据中序遍历可以知道左子树没有左子树,DCE为B的右子树,根据先序遍历,C先出现为根节点。D为左子树,E为右子树。
③FHG是右子树。先序遍历中F先出现,为根节点,说明右子树没有左子树。HG为右子树,先序遍历中G先出现,为根节点,H为G的左子树,所以二叉树为
后序遍后序历为:D-E-C-B-H-G-F-A
(2)已知道中序和后序遍历,求二叉树先序遍历。
已知中序BDCEAFHG,后序DECBHGFA,求先序遍历。
①由后序遍历可知道根节点为A
②再根据中序遍历可以知道,左子树为BDCE。根据后序遍历后出现的是根节点,所以B为根节点,所以左子树没有左子树,右子树为DCE ,后序遍历中C后出现为根,所以C的左子树为D,右子树为E。
③右子树为FHG,后序遍历F后出现为根节点,F的右子树为HG,后序遍历中G先出现为根节点,H为G的左子树。所以此二叉树即为上图的二叉树:
所以先序为A-B-C-D-E-F-G-H