バイナリツリーの問題の安全記録を証明するためにブラシ復興プラン

1.タイトル説明

そして、バイナリツリーの再構築の先行順走査でのバイナリツリーの先行順走査で結果を入力してください。仮定結果先行順トラバーサル順序と重複する数字の入力は無料です。入射例えばプレオーダートラバーサルシーケンス{1,2,4,7,3,5,6,8}及び{4,7,2,1,5,3,8,6}順序トラバーサル順序、及び再構成された二分木前リターン。

2.再帰的な問題解決

2.1分析

先行順走査:ルート→→左と右の
前順:ルート→→左右

  • 配列プレオーダートラバーサルプレによって= {1,2,4,7,3,5,6,8}既知のルートノードです。
  • 次に= {4,7,2,1,5,3,8,6} 1が見つかり順序トラバーサル順序で、それらは左サブツリーの位置を知っているであろう権利が正しい場所で、残っている1サブツリーを得ることができ、左サブツリー右サブツリー、それぞれ3及び4の長さ。
  • 再帰呼び出し:次いで、ツリー、左サブツリー及び右サブツリーとしてそれぞれプレオーダー左サブツリー及び右サブツリーのルートノード、各ノードおよび先行順走査を見つけるために、ルートノードの左の部分木が見つかりました。
  • 左サブツリー例における長さ3の、{4,7,2}、その後、対応するプリオーダールート要素3は、これら3つの要素2を通過した後、左の部分木を順次ルートノードであります再帰。

2.2コード

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if len(pre) == 0:
            return None
        elif len(pre) == 1:
            return TreeNode(pre[0])
        else:
            tree = TreeNode(pre[0])
            rootindex = tin.index(pre[0])
            tree.left = self.reConstructBinaryTree(pre[1:rootindex+1], tin[:rootindex])
            tree.right = self.reConstructBinaryTree(pre[rootindex+1:], tin[rootindex+1:])
            return tree

3.バイナリの基礎

C ++バージョンの
Pythonのバージョン

公開された38元の記事 98ウォンの賞賛 ビュー360 000 +

おすすめ

転載: blog.csdn.net/xijuezhu8128/article/details/104679392