先來看一顆Dom樹,html代碼以下html
<div id="container">
<div class="node_1">
<div class="node_1_1"></div>
<div class="node_1_2"></div>
<div class="node_1_3"></div>
</div>
<div class="node_2">
<div class="node_2_1"></div>
<div class="node_2_2"></div>
</div>
<div class="node_3"></div>
</div>
複製代碼
對應的Dom圖片以下(用Word畫的,本靈魂畫手實在盡力了。。) 前端
從圖片中咱們能夠直觀的看出:node
BFS遍歷結果:#container
,node_1
, node_2
,node_3
, node_1_1
, node_2_1
, node_2_2
算法
DFS遍歷結果:#container
,node_1
,node_1_1
,node_2
,node_2_1
,node_2_2
,node_3
ui
BFS從一個節點開始,嘗試訪問儘量靠近它的目標節點。本質上這種遍歷在圖上是逐層移動的,首先檢查最靠近第一個節點的層,再逐漸向下移動到離起始節點最遠的層。簡單來講在樹中BFS其實就是層次遍歷。spa
步驟:3d
代碼:code
const parentDOM = document.getElementById('container');
function breathTravalSal(node){
const nodes = [];
const queue = [];
if(node){
queue.push(node);
while(queue.length){
const item = queue.shift();
nodes.push(item);
for(const v of item.children){
queue.push(v);
}
}
}
return nodes;
}
console.log(breathTravalSal(parentDOM));
複製代碼
輸出結果: cdn
DFS就是從圖中的一個節點開始追溯,直到最後一個節點,而後回溯,繼續追溯下一條路徑,直到到達全部的節點,如此往復,直到沒有路徑爲止。htm
步驟:
代碼:
const parentDOM = document.querySelector('#container');
function deepTravalSal(node){
const nodes = [];
const stack = [];
if(node){
stack.push(node);
while(stack.length){
const item = stack.pop();
const len = item.children.length;
nodes.push(item);
for(let i = len - 1; i >= 0; i--){
stack.push(item.children[i])
}
}
}
return nodes;
}
console.log(deepTravalSal(parentDOM));
複製代碼
輸出結果:
輸出正確~
把學過的算法知識用在了前端上,舒坦~