@この記事は、公開番号csdn2299から公開されています。公開番号プログラマアカデミーに注目して
ください。この記事では、Python実装ツリーの深さ優先トラバースと幅優先トラバースについて説明します。次のように、参考のために共有してください。
幅優先(レベルトラバーサル)
ツリーのルートから開始して、ツリー全体を上から下、左から右にトラバースします。ノード
数とバイナリツリーの違いは、バイナリツリーの左右のノードが2つだけであることです。
幅優先:A-B-C-D-E-F-G-H-I
コードの実装
def breadth_travel(self, root):
"""利用队列实现树的层次遍历"""
if root == None:
return
queue = []
queue.append(root)
while queue:
node = queue.pop(0)
print node.elem,
if node.lchild != None:
queue.append(node.lchild)
if node.rchild != None:
queue.append(node.rchild)
深さ優先
深さ優先アルゴリズムには、前順走査、中次走査、および後順走査の3種類があります。
ルートノード->左サブツリー->右サブツリー
#实现 1
def preorder(self, root):
"""递归实现先序遍历"""
if root == None:
return
print root.elem
self.preorder(root.lchild)
self.preorder(root.rchild)
#实现 2
def depth_tree(tree_node):
if tree_node is not None:
print (tree_node._data)
if tree_node._left is noe None:
return depth_tree(tree_node._left)
if tree_node._right is not None:
return depth_tree(tree_node._right)
インオーダートラバーサルインオーダートラバーサルでは、インオーダートラバーサルを再帰的に使用して左側のサブツリーにアクセスし、ルートノードにアクセスして、最後にインオーダートラバーサルを使用して右側のサブツリーにアクセスします。
左サブツリー->ルートノード->右サブツリー
def inorder(self, root):
"""递归实现中序遍历"""
if root == None:
return
self.inorder(root.lchild)
print root.elem
self.inorder(root.rchild)
ポストオーダトラバーサルポストオーダトラバーサルでは、最初に再帰トラバーサルを使用して左右のサブツリーにアクセスし、最後にルートノードにアクセスします。
左サブツリー->右サブツリー->ルートノード
def postorder(self, root):
"""递归实现后续遍历"""
if root == None:
return
self.postorder(root.lchild)
self.postorder(root.rchild)
print root.elem
読んでいただきありがとうございます
。大学でpythonを勉強することに決めたとき、私はコンピューターの基礎がよくなかったことがわかりました。私は学問の資格を持っていませんでした。これは
何もすることはできません。埋め合わせるしかできないので、コーディング以外で自分の反撃を始めました。道は、Pythonのコア知識を学び続け、コンピューターの基礎の詳細な研究を整理し、平凡になりたくない場合は、コーディングに参加して成長してください!
実は、ここには技術だけでなく、それ以外のものもあり、例えば「絹糸」というよりも、どうやってプログラマーとして絶妙な存在になるのか、プログラマー自体が高貴な存在ですね。[参加するにはクリックしてください]自分らしくなりたい、高貴な人になりたい、是非!