跳到主要内容

面试题07. 重建二叉树

题目描述

做题链接:面试题07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。

输入:

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

输出:

    3
/ \
9 20
/ \
15 7

解题思路

  • 解题思路:

    • 数据结构——二叉树

      根据 pre 确定 根节点

      根据 vin 确定左右子树的大小

    • 递归编程

  • 注意点

    需要根据中序遍历结果,确定左子树长度 tin.index(value)

代码

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None

class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if len(pre) == 0 :
return None
if len(pre) == 1 :
return TreeNode(pre[0])

value = pre[0]
root = TreeNode(value)
# 截取左子树
preLeft = pre[1:tin.index(value) + 1] # 先序遍历,从第二个开始截图 左子树长度的 数组
tinLeft = tin[:tin.index(value)] # 中序遍历

# 截取右子树
preRight = pre[tin.index(value) + 1:] # 先序遍历, 左子树后的数组元素是 右子树
tinRight = tin[tin.index(value) + 1:] # 中序遍历

root.left = self.reConstructBinaryTree(preLeft, tinLeft)
root.right = self.reConstructBinaryTree(preRight, tinRight)
return root