脚本宝典收集整理的这篇文章主要介绍了深度优先和广度优先--搜索算法,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
1 树状结构
VAR result = {
id:0,
name:"张飞",
ITem:[
{id:1,name:"关羽"},
{id:2,name:"刘备",item:[
{id:5,name:"荀彧"},
{id:6,name:"关平"}
]},
//点击曹操这一项,加载出来刘禅和周仓,点击周仓,又异步加载项羽和别姬
{id:3,name:"曹操",item:[
{id:8,name:"刘禅"},
{id:9,name:"周仓",item:[
{id:10,name:"项羽"},
{id:11,name:"别姬"}
]}
]},
{id:4,name:"貂蝉"},
]
}
function cb(node) {
console.LOG(node)
}
2 深度优先
function dfs(nodes,key,cb,parent=null,args=null){
//对于入参的判断,node必须存在且是一个数组,如果不是,进行矫正
//key 必须是一个字符串,不能是函数之类的
// cb必须是一个函数
if(!nodes){
return false;
}
if(tyPEof cb != 'function') {
return fasle;
}
if(!Array.isArray(nodes)) {
nodes = [nodes];
}
nodes.foreach((node) => {
cb(node,parent,args)
dfs(node[key],key,cb,node,args)
})
}
3 广度优先
function bfs(nodes,cb,childKey,parent = null) {
if(!nodes){
return false;
}
if(typeof cb != 'function') {
return fasle;
}
if(!Array.isArray(nodes)) {
nodes = [nodes];
}
const stack = [];
nodes.forEach((node) => {
stack.push(node);
})
while(stack.length > 0) {
let node = stack.shift();
cb(node);
stack.push(...(node[childKey] || []));
}
}
以上是脚本宝典为你收集整理的深度优先和广度优先--搜索算法全部内容,希望文章能够帮你解决深度优先和广度优先--搜索算法所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。