【Leetcodeシリーズアルゴリズム] [] []平均前順序およびバイナリツリー構成シーケンスプレオーダー

トピック:

トピックリンク:  https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

 

問題解決のアイデア:

予約限定トラバーサル:ルート - >左のサブツリー - >右部分木

予約限定:左のサブツリー - >ルート - >右部分木

後順:左のサブツリー - >右部分木 - >ルート

 

トラバース規則によると、先行順ノウハウ前の最初の値は、現在のルートです

重複なしのタイトル説明ので、ルートノードの値の使用は、先行予約が左右の部分に分割され、左サブツリーが残され、右右サブツリーであります

あなたはすべての要素を使用するまで、この手順を繰り返し

 

コードの実装:

# 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:
        def build_help(preorder, inorder):
            if 0 == len(preorder) or 0 == len(inorder):
                return None
            
            in_index = inorder.index(preorder[0])
            if in_index == -1:
                return None
            
            node = TreeNode(preorder[0])
            del preorder[0]
            del inorder[in_index]
            node.left = build_help(preorder, inorder[:in_index])
            node.right = build_help(preorder, inorder[in_index:])
            return node
        
        return build_help(preorder, inorder)

 

公開された100元の記事 ウォンの賞賛4 ビュー1457

おすすめ

転載: blog.csdn.net/songyuwen0808/article/details/105401308