1. 程式人生 > 其它 >LeetCode 105[Python]. 從前序與中序遍歷序列構造二叉樹 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。

LeetCode 105[Python]. 從前序與中序遍歷序列構造二叉樹 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。

技術標籤:演算法題目演算法二叉樹資料結構leetcode

LeetCode 105. 從前序與中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。

注意:
你可以假設樹中沒有重複的元素。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

Code

def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
    if len(inorder)==0 or len(preorder)==0:
        return None
    root=TreeNode(preorder[0])#root節點
    mid=inorder.index(root.val)
    root.left=self.buildTree(preorder[1:mid+1],inorder[:mid]) #構建左節點
    root.right=self.buildTree(preorder[mid+1:],inorder[mid+1:])#構建右節點

    return root 

想法

前序遍歷:遍歷順序為 父節點 -> 左子節點 -> 右子節點
中序遍歷:遍歷順序為 左子節點 -> 父節點 -> 右子節點
左子樹節點個數 = 中序遍歷中根節點索引 - 開始位置
右子樹節點個數 = 結束位置 - 中序遍歷中根節點索引
在這裡插入圖片描述
在這裡插入圖片描述