题目
根据一棵树的前序遍历与中序遍历构造二叉树。
思路
由前序遍历, 可以知道根节点;根据根节点,可以把中序遍历分为左、右两颗子树。
# 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:
node_index= {val : index for index, val in enumerate(inorder)}
def helper(left, right):
if left > right: return
val = preorder.pop(0)
index = node_index[val]
root = TreeNode(val)
root.left = helper(left, index - 1)
root.right = helper(index + 1, right)
return root
return helper(0, len(inorder) - 1)