1. 程式人生 > 其它 >leetcode-python-從前序與中序遍歷序列構造二叉樹

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