1. 程式人生 > >105. 從前序與中序遍歷序列構造二叉樹

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

思路:遞迴,易知前序的第0號元素為樹的根,在中序裡找這個根,然後以該根為界將中序陣列劃分成左右兩半,依次遞迴進行。難點在於每次還要根據中序的劃分來將前序陣列也劃分。

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

class Solution:
    def buildTree(self, preorder, inorder)
:
""" :type preorder: List[int] :type inorder: List[int] :rtype: TreeNode """ if len(preorder) == 0: return None root = TreeNode(preorder[0]) mid = inorder.index(preorder[0]) #以mid為界劃分中序 in_left = inorder[:mid] in_right = inorder[mid+1
:] #根據中序劃分前序 pre_left = preorder[1:len(in_left)+1] pre_right = preorder[len(in_left)+1:] #遞迴左右子樹 root.left = self.buildTree(pre_left, in_left) root.right = self.buildTree(pre_right, in_right) return root