python實現樹的深度優先遍歷與廣度優先遍歷詳解

 更新時間:2019年10月26日 11:56:47   作者:ketchup_ong   我要評論
這篇文章主要介紹了python實現樹的深度優先遍歷與廣度優先遍歷,詳細分析了樹的深度優先遍歷與廣度優先遍歷原理及Python相關實現技巧,需要的朋友可以參考下

本文實例講述了python實現樹的深度優先遍歷與廣度優先遍歷。分享給大家供大家參考,具體如下:

廣度優先(層次遍歷)

從樹的root開始,從上到下從左到右遍歷整個樹的節點

數和二叉樹的區別就是,二叉樹只有左右兩個節點

廣度優先 順序: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)

深度優先

深度優先有三種算法:前序遍歷,中序遍歷,后序遍歷

先序遍歷 在先序遍歷中,我們先訪問根節點,然后遞歸使用先序遍歷訪問左子樹,再遞歸使用先序遍歷訪問右子樹

根節點->左子樹->右子樹

 #實現 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數據結構與算法教程》、《Python加密解密算法與技巧總結》、《Python編碼操作技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

最新評論

福建体育彩票时时彩11