-2

来自 JavaScript 的好部分(修改):

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

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

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

如果确实是深度优先,那么它是哪种深度优先方式——预购、中购还是后购?

这是关于树遍历的维基百科。

4

2 回答 2

2

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

于 2013-08-25T21:57:31.493 回答
2

它是一个 DFS。

这里 func 是在节点上发生的一些动作。因此,就考虑树遍历而言,为简单起见,我们可以放弃 func 。简化的遍历是:

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

现在很容易注意到,您正在为当前节点的所有子节点一一调用函数“walk”。当函数在其所有子节点上完成“行走”时,该函数也会返回。这是 DFS 的属性。

于 2013-08-25T22:07:26.253 回答