1. 程式人生 > >【演算法】二叉樹的廣度遍歷

【演算法】二叉樹的廣度遍歷

廣度優先遍歷的核心思想如下:從根節點開始遍歷,然後遍歷其子節點,再從左至右的,依次遍歷其孫子節點的,以此類推,直到完成整顆二叉樹的遍歷。

         50

   20         60

15  30            70

以如上的二叉樹為例,其廣度優先遍歷的順序是:50、20、60、15、30、70。

在程式碼中,我們使用佇列進行廣度優先遍歷,先把根節點放入佇列,利用佇列的先進先出原則,訪問佇列中取出的節點,並分別把左子節點和右子節點放入佇列,迴圈下去,直到佇列為空。

#encoding=utf-8

from queue import Queue

class TreeNode(object):
    def __init__(self,val,left=None,right=None):
        self.val=val
        self.left=left
        self.right=right

class BinaryTree(object):
    def __init__(self,root=None):
        self.root=root #這裡傳入的是建立好的Tree
        #print(root.val)
def breathSearth(self): if self.root==None: return None retlist=[] queue=Queue() queue.put(self.root) #用佇列的方式,先進先出,先將Tree從頂到底一次放進去,然後呼叫queue.get()方法,依次取出來存到retlist中 while queue.empty() is not True: node=queue.get() retlist.append(node.val)
if node.left!=None: #如果左節點和右節點不為空,再依次放到佇列中,while迴圈再取出來存到retlist中 queue.put(node.left) if node.right!=None: queue.put(node.right) return retlist if __name__=="__main__": #建立二叉樹 rootNode=TreeNode(50) rootNode.left=TreeNode(20,left=TreeNode(15),right=TreeNode(30)) rootNode.right=TreeNode(60,right=TreeNode(70)) #例項化 tree=BinaryTree(rootNode) #把建立好的二叉樹傳進去 retlist=tree.breathSearth() print(retlist)