js 遍历dom tree

// 深度优先遍历

算法描述:

(1)访问结点v。

(2)找到v的第一个邻接点w。

(3)如果邻接点w存在且未被访问,则从w出发深度优先遍历图;否则,结束。

(4)找顶点v关于w的下一个邻接点,转(3)。

递归算法:

function dfs (node) {

console.log(node); // 访问node

for(var i=0;i<node.children.length;i++) {

dfs(node.children[i]);

}

}

非递归算法 借用栈实现

function dfs (node) {

console.log(node); // 访问node

var stack = [];

while(node!=null) {

console.log(node); // 访问node

if(node.children.length!=0){

for(var i=node.children.length-1;i>=0;i--){

stack.push(node.children[i]);

}

}

node = stack.pop();

}

}

// 广度优先遍历

算法描述:

(1)设图G的初态是所有顶点未被访问,设置辅助队列Q,队列Q为空。

(2)任选一个未被访问过的顶点v作为遍历起点。

(3)访问v,并将v入队列,将v标为已访问。

(4)若队列Q不空,取出一个顶点v。

(5)查找v的所有未被访问的邻接点vi并对其访问,并入队列,转(4),直到队列为空。

(6)若此时还有未被访问过的结点,转(2),否则结束。

var visited = []; // 访问过的

var arr = []; // 辅助队列,记录本层遍历的

var nextRound = []; // 下一层需要的遍历

function bfs () {

arr = nextRound;

nextRound = [];

for(var i=0;i<arr.length;i++) {

visited.push(arr[i]); // 访问arr[i]

for(var j=0;j<arr[i].children.length;i++) {

nextRound.push(arr[i].children[j]);

}

}

}

while(nextRound.length) {

bfs();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值