描述
解析
这一题的关键是找到下标,然后执行递归操作
- 涉及到数组下标,可以采用列表的切片操作,同时index(()函数可用于获取列表对象的索引;
- 根据前序遍历,可以获取根节点下标,然后通过中序遍历判断左右子树的节点个数;
- 从而通过切片操作获取递归操作的前序遍历和中序遍历的序列,继续执行递归操作即可;
注意:切片操作,不包含右边索引的对象
# 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 not preorder or not inorder:
return None
root = TreeNode(preorder[0]) #获取根节点
index1 = inorder.index(root.val) #获取根节点下标
k = len(inorder[:index1]) #获取左子树节点个数(这里不包含index1对应的对象)
root.left = self.buildTree(preorder[1:k+1], inorder[:k])
root.right = self.buildTree(preorder[k+1:], inorder[k+1:])
return root