バイナリツリーデータ構造およびバイナリツリーの並べ替え

二進木

  • ルート
  • 左リーフノード
  • 右葉ノード
  • サブツリー
  • 高さ
#バイナリツリーの
 クラスノード():
    DEF __init __(自己、アイテム):
        self.item = 項目
        self.left = なし
        self.right = なし


クラスツリー(): 空のツリーを作成
    DEFの__init __(自己):
        self.rootを = なし

    に、addNode(セルフ、アイテム)DEF:
        ノード = ノード(項目)
        #ツリーが空の場合
        のIF self.root == なし:
            self.root = ノード
             戻り
        #バイナリツリーが空ではありません
        CUR = self.root 
        Q= [CUR] キューノードが継続的に外にノードを追加し
        ながら、Q:
            N- = q.pop(0 のIF n.left == なし:
                n.left = ノードは
                 BREAKない
            
                q.append(n.leftを)

            のIF N- == .RIGHT なし:
                n.right = ノード
                 BREAK 
            他に
                q.append(n.right) 
の幅トラバーサル
    DEF旅行(セルフ):
        CUR = self.root 
        Q = [CUR]
        しばらくQ:
            N- = q.pop(0 
            印刷(n.item)
            のIF n.left =!なし:
                q.append(n.left)
            IF n.right =!なし:
                q.append(n.right) 
深トラバーサル:後のルートノードの位置を参照する前に、
    #列の前に:ルートについて
    DEF frontTravel(セルフ、根):
        空#
        IFルート== なし:
             リターン・
        印刷(root.item)
        self.frontTravel(root.left)
        self.frontTravel(root.right)
    ために#:左と右のルート
    DEF midTravel(セルフ、根):
        IFルート== なし:
            返す
        self.midTravel(root.left)
        プリント(root.item)
        self.midTravel(root.right) の后を序:左右根
    デフafterTravel(自己、根):
        場合はルート== なし:
             返さない
        self.afterTravel(根を。左)
        self.afterTravel(root.right)
        プリント(root.item)

 

ツリー= 木()
tree.addNode(1 
tree.addNode(2 
tree.addNode(3 
tree.addNode(4 
tree.addNode(5 
tree.addNode(6 
tree.addNode(7 
#木。旅行()
tree.midTravel(tree.root)

 

 

バイナリツリートラバーサル

  • 横幅トラバーサル:レイヤートラバーサルによって層
  • 奥行きトラバーサル:それは、ルートノードの正面位置を指し
    • 前文:ルートについて
    • ために:左と右のルート
    • シーケンス後:ルートについて
 

バイナリツリーの並べ替え

  • まず、ルートノードを挿入します。ノードの基準を挿入します。あなたは、他のノードを挿入し、必要とルートノードを比較し、ルートノードの左側にあるツリーに挿入すると右側よりも小さく、大きな木を挿入

 

クラスノード():
    デフ__init __(自己、アイテム):
        self.item = 項目
        self.left = なし
        self.right = なし

クラスSortTree():
    デフ__init __(自己):
        self.root = なし

    midTravelデフ(自己、根): プリント(111 もしルート== なし:
             リターン
        #左根右
        self.midTravel(root.left)
        プリント(root.item)
        self.midTravel(root.right)

    insertNode(自己、項目)DEF:
        ノード =ノード(アイテム)
        CUR = self.root
         場合 self.root == なし:

            self.root = ノード
             戻り
        #树非空
        一方TRUE:
             もし cur.item> node.item:
                 もし cur.left == :なし

                    cur.left = ノード
                     ブレーク
                
                    CUR = cur.left
             もし cur.right == なし:

                    cur.right =ノード
                     ブレーク
                
                    CUR = cur.right 




T = SortTree()
t.insertNode(3 
t.insertNode(8 
t.insertNode(3 
t.insertNode(1 
t.insertNode(1 

t.midTravel(T。ルート)

 

おすすめ

転載: www.cnblogs.com/XLHIT/p/11366241.html