JS中的DFS和BFS
阿新 • • 發佈:2020-07-30
示例物件:
{name: 'a', next: [{name: 'b', next: [{name: 'd', next: []}, {name: 'e', next: []}]}, {name: 'c', next: [{name: 'f', next: []}, {name: 'g', next: []}]}]}
廣度優先遍歷:
function BFS(obj){ let list = [obj], listTemp = []; while(list.length != 0){ for(let i = 0, len = list.length; i < len; ++i){ console.log(list[i].name); listTemp= [...listTemp, ...list[i].next]; } list = listTemp; listTemp = []; } }
深度優先遍歷:
function DFS(obj){ let p = obj, p_p = [], n = -1; while(p != null){ if(p.is != true){ console.log(p.name); p.is = true; } let pTemp = null; for(let i = 0, len = p.next.length; i < len; ++i){ if(p.next[i].is != true){ p_p[n + 1] = p; pTemp = p.next[i]; ++n; break; } } p = pTemp; if(p == null){ p = p_p[n]; --n; } } }