题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6},则重建二叉树并返回。
解析:
前序遍历:根左右
中序遍历:左根右
我们知道树的定义是递归的,因此我们重建二叉树时也采用递归的方法。关键是如何根据这两种遍历确定下标。
二叉树重建的实例如下所示:
代码实现:
class TreeNode(object):
def __init__(self,val):
self.val = val
self.left = None
self.right = None
class Solution(object):
def reBuildBinaryTree(self,pre,tin):
if not pre and not tin:
return None
root = TreeNode(pre[0])
i = tin.index(pre[0])
# i = tin.index(pre[0])
root.left = self.reBuildBinaryTree(pre[1:i + 1],tin[:i])
root.right = self.reBuildBinaryTree(pre[i + 1:],tin[i+1:])
return root
s = Solution()
pre = [1,2,4,7,3,5,6,8]
tin = [4,7,2,1,5,3,8,6]
res = s.reBuildBinaryTree(pre,tin)
print(res.val)
print(res.left.val)
print(res.right.val)
结果: