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