【演算法】二叉樹的廣度遍歷
阿新 • • 發佈:2018-11-09
廣度優先遍歷的核心思想如下:從根節點開始遍歷,然後遍歷其子節點,再從左至右的,依次遍歷其孫子節點的,以此類推,直到完成整顆二叉樹的遍歷。
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)