1. 程式人生 > 程式設計 >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程式設計有所幫助。