note_18:BFS和DFS的兩道題?

BFS和DFS的兩道題?


參考



1. BFS

有一個結構滿足以下形式:
node =
    {name:“1”, children:[
       {name:“2”, children:[ {name:“4”, children:[ ] }, {name:“5”, children:[ ] } ] },
       {name:“3”, children:[ {name:“6”, children:[ ] }, {name:“7”, children:[ ] } ] }
    ] }
打印結果:
[“1”, “2”, “3”, “4”, “5”, “6”, “7”]

畫個圖,然後用BFS,如果是二叉樹的話就相當於層次遍歷,可以用隊列可以實現。
在這裏插入圖片描述

(function main() {
  var node = 
	{name:"1", children:[
      {name:"2", children:[ {name:"4", children:[ ] }, {name:"5", children:[ ] } ] }, 
      {name:"3", children:[ {name:"6", children:[ ] }, {name:"7", children:[ ] } ] } 
	 ] };
  var queue = []; // 用隊列,因爲要遍歷完一整層
  queue.push(node);  // 將第一個點入隊
  var printArr = [];
  while (queue.length !== 0) { // 當隊列空了之後相當於全部結點都遍歷了
    var temp = queue.shift();  // 每次都是頭一個元素出隊
    printArr.push(temp.name);  // 存起來是方便之後輸出結果,不用慢慢調格式
    var childs = temp.children; 
    for (var i = 0; i < childs.length; i++) {  // 遍歷它的孩子結點,相當於遍歷一整層
      var tmp = childs[i];
      queue.push(tmp);  // 遍歷了之後入隊
    }
  }
  console.log(printArr);  //  ["1", "2", "3", "4", "5", "6", "7"]
}());

2. DFS

有一個結構滿足以下形式:
node =
    {name:“1”, children:[
       {name:“2”, children:[ {name:“4”, children:[ ] }, {name:“5”, children:[ ] } ] },
       {name:“3”, children:[ {name:“6”, children:[ ] }, {name:“7”, children:[ ] } ] }
    ] }
打印結果:
[“1”, “2”, “4”, “5”, “3”, “6”, “7”]

畫個圖,然後用DFS,如果是二叉樹的話,相當於先序遍歷,可以用遞歸實現。
在這裏插入圖片描述

function dfs(node, nodeList) {
  if (node) {
    nodeList.push(node.name); // 先將點放入list中
    var children = node.children; // 獲取node的孩子
    for (var i = 0; i < children.length; i++) { 
      dfs(children[i], nodeList); // 對每個孩子結點都用dfs,找一條最深的路徑
    }
  }
  return nodeList; // 遍歷到最深的時候就是遞歸出口
}

(function main() {
  var node = 
	{name:"1", children:[
      {name:"2", children:[ {name:"4", children:[ ] }, {name:"5", children:[ ] } ] }, 
      {name:"3", children:[ {name:"6", children:[ ] }, {name:"7", children:[ ] } ] } 
	 ]};
  var printArr = dfs(node, []);  // 會利用到遞歸來解,因爲要遍歷到最深的路徑才返回
  console.log(printArr);  // ["1", "2", "4", "5", "3", "6", "7"]
}())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章