1 クラスノード(オブジェクト):
2 「」「ノードが左の子および右側の子を有する定義「」」
3。 DEF __init__ (セルフ、データ):
4つの #1 ノードデータ
5。 self.data = データ
6。 #左右子はヌルポイントである
7。 self.lchild = なし
8。 self.rchild = なし
9。
10 クラスBinaryTree(オブジェクト):
11 '' ' バイナリ' ''
12である DEF __init__ (自己):
13である #ルートノードは、デフォルトでは空である
14 の自己。 root = なし
15
16 DEF 追加(セルフ、データ):
17の #最終的に二分木にデータを追加するために、追加データ
18 #親ノードが子および右側の子左:処理順序
。19 ノード= ノード(データ)
20は、 #空の木場合
21は IFセルフ.Rootはありませんなし:
22である self.root = ノード
23は、 #空のツリーは、ルートノードに追加されたデータ
24 リターン
25 キュー= [self.root]
26である #ノードの存在の徴候として、ルート・ノードを追加する
27 一方キュー:
28 #キューが空でない場合は
29 cur_nodeを=queue.pop(0)
30 #現在のルートノード点、最初の要素テイク
31は IF cur_node.lchildはしないなし:
32 #左空ノード場合
33である cur_node.lchild = ノード
34は リターン
35 他:
36 #の追加左ノードの存在を証明するためのポインタ
37 [ queue.append(cur_node.lchild)
38が IF cur_node.rchildはしないなし:
39 #右のノードが空の場合は
40 cur_node.rchild = ノード
41は リターン
42は、 他:
43のIS #右接合部の存在証明、ポインタに追加
44がある (cur_node.rchild)queue.append
45
46は DEF (セルフ、ノード)pre_order:
47 「」「行きがけ- >ルートについて」「」
48 IFノードはありませんなし:
49 リターン
50 プリント(node.data、エンド= " " )
51である self.pre_order(ノード、lchild)
52である #は戻りトラバース直後、再帰左ノードを有する
53である self.pre_order(ノード、rchild)
54である #横断右空になるまで
55
56 def in_order(self、node):
57 '' '予約限定- >ルートは左と右の'' '
58 IFノードはありませんなし:
59 リターン
60 self.in_order(ノード、lchild)
61がある #再帰左ノードた
62が 印刷(node.data、エンド= " " )
63がある #印刷出力データ
64 self.in_order(node、rchild)
65 #右のデータをトラバースする
66
67
68 def post_order(self、node):
69 '' ' ポストオーダーのトラバーサル->左と右のルート' ''
70 ノードがない場合:
71 return 72
self.post_order(ノードlchild)
73は、 #再帰左ノード持つ
74 self.post_order(ノード、rchild)
75 位ノードを再帰的に正しいされている
76 プリント(node.data、エンド= " ")
2020-04-18