LeetCode105:Construct Binary Tree from Preorder and Inorder Traversal
阿新 • • 發佈:2019-01-06
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
preorder = [3,9,20,15,7] inorder = [9,3,15,20,7]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
LeetCode: 連結
劍指offer同題:劍指Offer_程式設計題04:重建二叉樹
本題為前序遍歷和中序遍歷,最少需要兩種遍歷方式,才能重建二叉樹。
前序遍歷序列中,第一個數字總是樹的根結點的值。在中序遍歷序列中,根結點的值在序列的中間,左子樹的結點的值位於根結點的值的左邊,而右子樹的結點的值位於根結點的值的右邊。剩下的我們可以遞迴來實現。
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def buildTree(self, preorder, inorder): """ :type preorder: List[int] :type inorder: List[int] :rtype: TreeNode """ if not preorder: return None '''當列表中只剩下一個值時,一定要注意返回的是preorder[0],而不是preorder 而且一定要TreeNode''' if len(preorder) == 1: return TreeNode(preorder[0]) '''先找到根節點 要定義成TreeNode樣式''' root = TreeNode(preorder[0]) '''根據根節點數值定義到中序序列的index''' index = inorder.index(preorder[0]) root.left = self.buildTree(preorder[1:index+1], inorder[:index]) root.right = self.buildTree(preorder[index+1:], inorder[index+1:]) return root