题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
# 声明树节点
class TreeNode:
def __init__(self, x):
self.val = x # 数据域
self.left = None # 左指针
self.right = None # 右指针
# 构造二叉树
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, mid):
if not pre or not mid:
return None
root = TreeNode(pre[0]) # 获取树的根节点值
val = mid.index(pre[0]) # 获取根节点值在中序遍历中的位置索引
root.left = self.reConstructBinaryTree(pre[1:val+1], mid[:val])
root.right = self.reConstructBinaryTree(pre[val+1:], mid[val+1:])
return root
# 递归输出
def search_tree(head):
if head is not None:
print(head.val)
search_tree(head.left)
search_tree(head.right)
if __name__=="__main__":
preorder = [1,2,4,7,3,5,6,8]
inorder = [4,7,2,1,5,3,8,6]
sol = Solution()
root = sol.reConstructBinaryTree(preorder, inorder)
search_tree(root)