ツリーの再構築(Python)


タイトルの説明
ツリーの前順および中順の結果を入力し、ツリーを再構築します.入力された前シーケンスおよび中シーケンスの結果に重複する数値が含まれていないと仮定します.例えば、前シーケンス遍歴シーケンス{1,2,4,7,3,5,6,8}と中シーケンス遍歴シーケンス{4,7,2,1,5,3,8,6}を入力すると、ツリーが再構築され、戻ります.
考え方:
二叉木の遍歴は典型的な再帰問題であり、問題に特別な要求がなければ、再帰は必然的に最も簡単な方法であり、なぜか聞かないで、覚えておけばいい.まず前序はいつもルートノードを読み出して、私达はこれによって中序を左右の2つの部分に分けて、中序の中で、ルートノードの左にあるのは左のサブツリーの要素で、右にあるのは右のサブツリーの要素です.
コード:
#Python        

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    #      TreeNode   
    def reConstructBinaryTree(self, pre, tin):
        lon = len(pre)
        if lon == 0:
            return None
        elif lon == 1:
            return TreeNode(pre[0])
        else:
            root = TreeNode(pre[0])
            #             ,             ,pre[0]       ,tin.index      ,          1  , tin.index+1  ,              ,       。
            root.left = self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])])
            root.right = self.reConstructBinaryTree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:])
            return root 
            #    return