leetcode-python-從前序與中序遍歷序列構造二叉樹
阿新 • • 發佈:2021-06-17
由前序的特點,第一個必定是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 = rightclass 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