已知先序遍历和中序遍历,输出后序遍历
题目描述
对于一棵二叉树,已知先序遍历ACDEFHGB,中序遍历DECAHFBG,求后序遍历。
解题思路
首先条件给出了先序遍历和中序遍历,那么我们利用这两种遍历特性得到一下信息:
- 对于先序遍历,第一个节点是根节点
- 对于中序遍历,根节点的左边是左子树节点,右边是右子树节点
利用以上信息我们就可以利用递归构建出二叉树,然后通过后序遍历得到结果
Python代码如下
class TreeNode:
def __init__(self,x):
self.val = x
self.left =None
self.right =None
class Solution:
#返回构造的TreeNode根节点
def reConstructBinaryTree(self,pre,tin):
if len(pre) == 0:
return None
root = TreeNode(pre[0])
TinIndex = tin.index(pre[0])
root.left = self.reConstructBinaryTree(pre[1:TinIndex+1],tin[0:TinIndex])
root.right = self.reConstructBinaryTree(pre[TinIndex+1:],tin[TinIndex+1:])
return root
def PostTraversal(self,root):
if root != None:
self.PostTraversal(root.left)
self.PostTraversal(root.right)
print(root.val)
pre = ['A','C','D','E','F','H','G','B']
tin = ['D','E','C','A','H','F','B','G',]
S = Solution()
root = S.reConstructBinaryTree(pre,tin)
S.PostTraversal(root)