输入:先序遍历,中序遍历;
输出:构建的二叉树;
方法:分治策略(递归),先建立节点,确定递归边界(数组为空,也就是没有节点的时候)
题目:
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
# 先根据先序遍历数组确定根节点(截取数组),再根据中序遍历,递归(不断确定根节点)
if len(preorder)==0:
return # 递归边界,没有数据可用了,直接return,不用带返回值就行
t = TreeNode(preorder[0])# 新建根节点(其实每一个过程都是建立相应子树的根节点)
root=preorder[0]
t.left = self.buildTree(preorder[1:inorder.index(root) + 1], inorder[0:inorder.index(root)]) # 构建左子树
t.right = self.buildTree(preorder[inorder.index(root) + 1:], inorder[inorder.index(root) + 1:]) # 构建右子树
return t # 返回构建的Tree