1. 程式人生 > >第三篇 深度優先和廣度優先

第三篇 深度優先和廣度優先

-h oot -c 廣度優先遍歷 code 技術分享 sub depth not

  技術分享

技術分享

PS:一個網站下除了主域名,還會有多個子域名 需要通過遍歷把所有域名取到

技術分享

深度優先的算法,根據上面的截圖,爬取url的順序是A--B--D--E--I---C--F-G--H,實際上深度優先算法是通過遞歸算法來實現的

而廣度優先和深度優先區分開來,會分層爬取,把同一層級的兄弟節點爬取完後,才會繼續爬下一層

技術分享

深度優先算法:

(1)訪問初始頂點v並標記頂點v已訪問。
(2)查找頂點v的第一個鄰接頂點w。
(3)若頂點v的鄰接頂點w存在,則繼續執行;否則回溯到v,再找v的另外一個未訪問過的鄰接點。
(4)若頂點w尚未被訪問,則訪問頂點w並標記頂點w為已訪問。
(5)繼續查找頂點w的下一個鄰接頂點wi

,如果v取值wi轉到步驟(3)。直到連通圖中所有頂點全部訪問過為止。

廣度優先算法:

(1)頂點v入隊列。
(2)當隊列非空時則繼續執行,否則算法結束。
(3)出隊列取得隊頭頂點v;訪問頂點v並標記頂點v已被訪問。
(4)查找頂點v的第一個鄰接頂點col。
(5)若v的鄰接頂點col未被訪問過的,則col入隊列。
(6)繼續查找頂點v的另一個新的鄰接頂點col,轉到步驟(5)。直到頂點v的所有未被訪問過的鄰接點處理完。轉到步驟(2)。

#深度優先過程
def depth_tree(tree_node):
    if tree_node is not None:
        print(tree_node._data)
            
if tree_node._left is not None: return depth_tree(tree_node._left) if tree_node._right is not None: return depth_tree(tree_node._right) #廣度優先過程 def level_queue(root): """ 利用隊列實現樹的廣度優先遍歷 :param root: :return: """ if root is None:
return my_queue = [] node = root my_queue.append(node) while my_queue: node my_queue.pop(0) print(node.elem) if node.lchild is not None: my_queue.append(node.lchild) if node.rchild is not None: my_queue.append(node.rchild)

第三篇 深度優先和廣度優先