バイナリツリーの幅優先トラバーサル、深さ優先トラバーサル

以下からのキューのインポートキュー

" "" 
二叉树: 1.深度遍历 2.广度遍历 """ クラスノード(オブジェクト): デフ __init__(自己、値、左=なし、右= なし): self.value = self.left = self.right = クラスBinaryTree(オブジェクト): デフ __init__(自己、ルート= なし): self.root = ルート デフ pre_ord(自己、結果= []、ノード= ' ルート' ): ""」先序遍历""」 であればノード== ' ' ノード = self.root 場合、ノードはありません ないなし: result.append(node.value) 場合node.left: self.pre_ord(その結果、node.left) もしノード.RIGHT: self.pre_ord(その結果、node.right) リターン結果 DEF in_order(自己、結果= []、ノード= ' ルート' ): "" " 中序遍历""" であればノード== ' ' ノード = self.root 場合、ノードはありません ではないなし: もしnode.left: self.in_order(その結果、node.left) result.append(node.value) 場合node.right: self.in_order(その結果、node.right) リターン結果 デフ post_order(自己、結果= []、ノード= ' ルート' ): "" " 后序遍历""" であればノード== ' ' ノード = self.root もしノードではない ではないなし: 場合:node.left self.post_order(その結果、node.left) の場合node.right: self.post_order(その結果、node.right) result.append(node.value) リターン結果 デフbreathSearch(自己): "" " 广度优先遍历""" 場合 self.rootがあるなし: 戻りなし resultList = [] Q = キュー() q.put(self.root)を しながら ではない)(q.empty: ノード =q.get() resultList.append(node.value) の場合node.left: q.put(node.left) 場合node.right: q.put(node.right)が 返すresultListを 場合 __name__ == ' __main__ ' 构造二叉树的结点 ルートノード=ノード(50 rootNode.left =ノード(20、左=ノード(15)、右=ノード(30 )) rootNode.right =ノード(60、右=ノード(70 )) BT = BinaryTree(ルートノード) 构造二叉树 プリント(bt.pre_ord()) 印刷(bt.in_order()) プリント(bt.post_order()) プリント(bt.breathSearch())

 

おすすめ

転載: www.cnblogs.com/reyinever/p/11308024.html