javascript中的广度优先遍历(BFS)和深度优先遍历(DFS)

//dfs深度优先(递归)
var nodelist=[]
function deepTraversal(node,nodelist){
    if(node){
        nodelist.push(node)
        var children=node.children
        for(var i=0;i<children.length;i++){
            deepTraversal(children[i],nodelist)
        }
    }
    return nodelist
}
console.log(deepTraversal(root,nodeList=[]))

思路:
1.创建一个数组存放最终结果
2.当节点不为空时将节点push进去数组里面
3.获取儿子 遍历儿子节点
4.递归


//bfs广度优先(利用队列)
function wideTraverval(node){
    var nodelist=[]
    if(node!=null){
        var temp=[]
        temp.unshift(node)
        while(temp.length!=0){
            var item=temp.shift()
            nodelist.push(item)
            var children=item.children
            for(var i=0;i<children.length;i++){
                temp.push(children[i])
            }
        }
    }
    return nodelist
}

广度优先遍历二叉树,也就是按层次的去遍历。依次遍历根节点,然后是左孩子和右孩子。所以要遍历完当前节点的所有孩子,。根据左右孩子的顺序来输出,所以就是先进先出的原则,那么我们当然就想到了队列这个数据结构:
思路:
1.创建一个nodelist存放最终结果
2.创建一个队列存放
3.当队列不为空时,获取队列第一个元素 ,存进nodelist
4.遍历所有的儿子节点,存进队列尾部
5.队列为空时退出循环并结束

猜你喜欢

转载自blog.csdn.net/qq_41988554/article/details/104805086