leetcode-python-从前序与中序遍历序列构造二叉树
由前序的特点,第一个必定是root结点
由中序的特点,根节点左侧为左子树,右侧为右子树。
递归流程为:
1)从preorder中找到根节点
2)从inorder中拆分出左右子树
3)按长度在preorder中继续找到左右子树的preorder进行递归建树
# 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: return None root = TreeNode(preorder[0]) left_inorder = inorder[: inorder.index(root.val)] right_inorder = inorder[inorder.index(root.val) + 1 :] l_left = len(left_inorder) left_preorder = preorder[1:l_left + 1] right_preorder = preorder[l_left + 1 :] root.left = self.buildTree(left_preorder, left_inorder) root.right = self.buildTree(right_preorder, right_inorder) return root

浙公网安备 33010602011771号