给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
思路:递规
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
def insertTree(root,preo,ino,flag):
if(not preo):return
current = preo[0]
if(flag == 0):
root.left = TreeNode(current)
root = root.left
else:
root.right = TreeNode(current)
root = root.right
insertTree(root,preo[1:ino.index(current)+1],ino[:ino.index(current)],0)
insertTree(root,preo[ino.index(current)+1:],ino[ino.index(current)+1:],1)
l = TreeNode(0)
insertTree(l,preorder,inorder,0)
return l.left