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

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

ear while循環 一次 utf-8 取出 bsp tree bject 開始

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

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)

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