微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

树数据结构中的 DFS - 这个递归函数的基本情况是什么?

如何解决树数据结构中的 DFS - 这个递归函数的基本情况是什么?

(我不是母语人士。我为我糟糕的英语道歉?)

如果有一棵树,如下所示。

enter image description here

每个节点都是一个对象。

ex) nodeA.data = 23,nodeA.children = [nodeB,nodeC]

如果我们从根开始在DFS中搜索这棵树,结果将是

23 - 19 - 15 - 22 - 35 - 31 - 38

而下面的代码是 DFS 的一个实现,它成功记录了与上面相同的结果。

class TreeNode {
  constructor(data) {
    this.data = data;
    this.children = [];
  }
  
  // ... omit  

  depthFirstTraversal() {
    console.log(this.data);
    this.children.forEach(child => child.depthFirstTraversal());
  }
}

但是我很好奇:

如果 forEach 循环内的递归调用被重复并且最终“child”参数指向 nodeD 会怎样?

enter image description here

解决方法

你担心的情况不会发生。

child 回调中的 forEach 变量只能是 undefined,如果在 children 数组中您有 undefined 值。但这将是一件奇怪的事情。实际上,当 this 是叶节点(如节点 D)时,它将有一个 this.children 数组,因此 forEach 循环不会使任何迭代,其回调函数都不会被调用。

这就是递归的基本情况:when this.children.length == 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。