[Tree]105. Construct Binary Tree from Preorder and Inorder Traversal

  • 分類:Tree
  • 時間復(fù)雜度: O(n) 這種把樹的節(jié)點都遍歷一遍的情況時間復(fù)雜度為O(n)
  • 空間復(fù)雜度: O(h) 樹的節(jié)點的深度

105. Construct Binary Tree from Preorder and Inorder Traversal

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

代碼:

# 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: 'List[int]', inorder: 'List[int]') -> 'TreeNode':
        
        if preorder==None or inorder==None or len(preorder)!=len(inorder):
            return None
        return self.helper(preorder,inorder,0,0,len(inorder)-1)
    
    def helper(self,preorder,inorder,pre_st,in_st,in_ed):
        if pre_st>=len(preorder) or in_st>in_ed:
            return
        root=TreeNode(preorder[pre_st])
        for i in range(in_st,in_ed+1):
            if inorder[i]==preorder[pre_st]:
                break
        root.left=self.helper(preorder,inorder,pre_st+1,in_st,i-1)
        root.right=self.helper(preorder,inorder,pre_st+(i-in_st)+1,i+1,in_ed)
        return root

討論:

1.考察前序遍歷和中序遍歷的特點,利用遞歸/分治來解這道題
2.注意幾個位置,一個pre_st,一個in_st,in_ed

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容