Python 樹的深度優先和廣度優先

2021-10-24 12:31:40 字數 2694 閱讀 1767

"""

廣度優先和深度優先

"""# 樹的節點,如果是第乙個,則為root節點

class

node

:def

__init__

(self, value)

: self.val = value

self.left =

none

self.right =

none

# 定義樹

class

tree

:def

__init__

(self)

: self.root =

none

# 新增元素

defadd_element

(self, node_value)

: node = node(node_value)

# 生成 node

if self.root is

none

:# 判斷root是否存在

self.root = node

return

queue =

[self.root]

# 如果存在了,把root先放到佇列queue中

while

true

: pop_node = queue.pop(0)

# 不斷從queue佇列中pop出node

if pop_node.left is

none

:# 判斷pop_node 左鍵點存在否

pop_node.left = node # 如果不存在,將我們新增的node設定為這個元素的左節點,然後結束迴圈

return

else

:# 如果存在左節點,將pop_node.left 放入queue,等待下一次迴圈時pop

if pop_node.right is

none

:# 同上,左節點如果存在,看看右節點是否存在。

pop_node.right = node

return

else

:def

bfs(self)

:"""

廣度優先,利用佇列,原理和新增元素時候一樣

"""if self.root is

none

:return

queue =

[ self.root ]

while queue:

pop_node = queue.pop(0)

print

(pop_node.val)

if pop_node.left is

notnone

:if pop_node.right is

notnone

:def

dfs_preorder

(self, root)

:"""

深度優先-利用遞迴 ,先序遍歷

12 3

4 5 6 7

1 2 4 5 3 6 7

"""if root is

none

:return

print

(root.val, end=

' ')

self.dfs_preorder(root.left)

self.dfs_preorder(root.right)

defdfs_inorder

(self, root)

:"""

深度優先-利用遞迴 ,中序遍歷

12 3

4 5 6 7

4 2 5 1 6 3 7

"""if root is

none

:return

self.dfs_inorder(root.left)

print

(root.val, end=

' ')

self.dfs_inorder(root.right)

defdfs_postorder

(self, root)

:"""

深度優先-利用遞迴 ,後序遍歷

12 3

4 5 6 7

4 5 2 6 7 3 1

"""if root is

none

:return

self.dfs_postorder(root.left)

self.dfs_postorder(root.right)

print

(root.val, end=

' ')

tree = tree(

)tree.add_element(1)

tree.add_element(2)

tree.add_element(3)

tree.add_element(4)

tree.add_element(5)

tree.add_element(6)

tree.add_element(7)

# tree.bfs()

# tree.dfs_preorder(tree.root)

# tree.dfs_inorder(tree.root)

tree.dfs_postorder(tree.root)

樹搜尋 深度優先和廣度優先

在android開發中,有時候會遇到多層級列表的顯示,如下圖,可用recyclerview實現。其資料來源的資料結構是一種樹狀結構,如下圖 現在有兩種方法來遍歷這種資料結構。深度優先搜尋 其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。舉例說明之 據上圖,我們從...

深度優先和廣度優先

在爬蟲系統中,待抓取url佇列是很重要的一部分,待抓取url佇列中的url以什麼樣的順序排隊列也是乙個很重要的問題,因為這涉及到先抓取哪個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面是常用的兩種策略 深度優先 廣度優先 注 scrapy預設採用的是深度優先演算法 這裡是深...

深度和廣度優先

深度優先演算法dfs depth first search 廣度優先演算法bfs breadth first search 又叫做層次遍歷,自上向下,自左向右逐層訪問結點,訪問完一層再訪問下一層,直到無結點。深度優先搜素演算法 不全部保留結點,占用空間少 有回溯操作 即有入棧 出棧操作 執行速度慢。...