javascript - --这是广度优先还是深度优先搜索的例子?

标签 javascript computer-science

这是一个遍历整个文档对象模型的简单函数。我想知道这是广度优先还是深度优先,以及如何理解原因:

var traverseDOM = function () {
  function traverse (parent) {
    // mark 1
    _(parent.childNodes).forEach((child) => {
      traverse(child);
    }
    // mark 2
  }
  traverse(document.body);
}

从这个相关的 SO Post 看来是深度优先搜索.

可以根据wikipedia进一步分类.

InOrder、PreOrder 和 PostOrder。

最佳答案

考虑下面的树:

Initial tree

您从 traverse(1) 开始:

traverse(1)

traverse(1)

在“标记 1”之后,该方法将开始遍历所有子节点,为每个子节点调用 traverse。第一个,traverse(1.1),将“介入执行”:

traverse(1)
traverse(1.1)

traverse(1.1)

traverse(1.1) 命中“标记 1”时,它将开始处理 它的 子级并调用 traverse(1.1.1) :

traverse(1)
traverse(1.1)
traverse(1.1.1)

traverse(1.1.1)

由于“1.1.1”没有任何 child ,traverse(1.1.1) 到达“标记 2”,执行流程将返回到 forEach 循环父方法的 traverse(1.1):

traverse(1)
traverse(1.1)

traverse(1.1)

循环继续,traverse 将为第二个 child “1.1.2”调用:

traverse(1)
traverse(1.1)
traverse(1.1.2)

traverse(1.1.2)

在处理完“1.1”的两个子项后,traverse(1.1) 到达“标记 2”,执行流程现在回到 forEach 循环中 遍历(1):

traverse(1)

traverse(1)

继续“1.2”:

traverse(1)
traverse(1.2)

traverse(1.2)

我会在这里停下来,但你应该掌握它。您可以看到,“1.1.1”和“1.1.2”在“1.2”之前被访问,使其成为深度优先搜索。广度优先搜索将在“1.1.1”之前访问“1.2”和“1.3”。

关于javascript - --这是广度优先还是深度优先搜索的例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45870638/

相关文章:

javascript - 如何通过跨域 AJAX 调用保护 ASP.NET Web API?

javascript - 错误 : [ng:areq] Argument 'meetupsController' is not a function, 未定义

javascript - 如何防止方框包围我的幻灯片上的下一个和上一个按钮?

data-structures - 链表有什么用?

database-design - PintOS 等数据库系统的教育项目?

math - 与《海龟几何》类似的书

JavaScript 正则表达式?或者其他非常正确的文本输入方法

javascript - Jquery在没有函数的表中追加新行后添加点击事件

arrays - 简单数组追加操作的时间复杂度

sockets - 通过级别和 kill-9 的套接字故障来查看内核