这是广度优先还是深度优先?

时间:2013-08-25 21:54:58

标签: javascript

从JavaScript好的部分(修改):

var walk_the_DOM = function walk(node, func) {
    func(node);
    node = node.firstChild;
    while(node) {
        walk(node, func);
        node = node.nextSibling;
    }
}

我很难分析这个。 DOM调用很简单。

它似乎是深度优先,因为每个深度级别都会重复调用walk()

如果确实是深度优先,首先是什么样的深度 - 预购,有序或后期订购?

以下是tree traversal上的维基百科。

2 个答案:

答案 0 :(得分:2)

深度优先。因为它总是试图遍历每个递归调用的更深层次。

答案 1 :(得分:2)

它是DFS。

这里func是节点上发生的一些动作。因此,就考虑树遍历而言,我们可以简单地删除func。简化的遍历是:

function walk(node) {
   node = node.firstChild;
   while(node) 
   {
     walk(node);
     node = node.nextSibling;
   }
}

现在很容易注意到,您正在为当前节点的所有子节点逐个调用函数“walk”。此函数在完成所有子节点的“行走”时返回。这是DFS的财产。