从前序与中序遍历序列构造二叉树
· 约 1 分钟阅读 · – 次阅读
leetcode
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
递归的思路
但是这里面的细节需要一些优化才能通过OJ
# 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:
if not preorder or not inorder:
return None
if len(preorder) <=1 or len(inorder) <= 1:
return TreeNode(preorder[0])
root_val = preorder[0]
root = TreeNode(root_val)
inorder_dict = {v:k for k, v in enumerate(inorder)}
i = 0
inorder_index = inorder_dict[root_val]
left_tree_num = inorder_index
right_tree_num = len(inorder) - inorder_index - 1
root.left = self.buildTree(list(preorder[1:left_tree_num+1]), list(inorder[:inorder_index]))
root.right = self.buildTree(list(preorder[1+left_tree_num:]), list(inorder[inorder_index+1:]))
return root
迭代法
TODO