二進木
- ルート
- 左リーフノード
- 右葉ノード
- サブツリー
- 高さ
#バイナリツリーの クラスノード(): 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。ルート)