"""
廣度優先和深度優先
"""# 樹的節點,如果是第乙個,則為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 又叫做層次遍歷,自上向下,自左向右逐層訪問結點,訪問完一層再訪問下一層,直到無結點。深度優先搜素演算法 不全部保留結點,占用空間少 有回溯操作 即有入棧 出棧操作 執行速度慢。...