Javascript 泛型树的递归循环
几天来,我一直在努力解决以下问题。假设递归函数在基本上是树表示的字典中进行迭代 输入如下所示:Javascript 泛型树的递归循环,javascript,recursion,depth-first-search,Javascript,Recursion,Depth First Search,几天来,我一直在努力解决以下问题。假设递归函数在基本上是树表示的字典中进行迭代 输入如下所示: var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]} 它所代表的对应树如下所示: var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]} 中间目标是以depht first搜索方式打印数字,即: 我对这个问题的解决方案是: function dfs(co
var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]}
它所代表的对应树如下所示:
var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]}
中间目标是以depht first搜索方式打印数字,即:
我对这个问题的解决方案是:
function dfs(connections, parent) {
console.log(parent);
if (!(parent in connections)) {
return;
}
for (i = 0; i < connections[parent].length; i++) {
dfs(connections, connections[parent][i]);
}
return;
}
导致以下结果:
1
2
5
6
7
这意味着它不会返回到上一个函数并继续for循环。如果你有任何想法,我将非常感激
Cheers您的
i
是隐式全局的,因此在它迭代2
(长度为3)之后,i
是4,因此对i<连接[parent].length的进一步测试将失败
您可以使用let
来修复它(for(let i=0
),但是使用forEach
可能会更好:数组方法比for
循环更详细、更不容易出错、更实用:
var连接={
1: [2, 3, 4],
2: [5, 6, 7],
3: [8],
4: [9, 10]
}
函数dfs(连接、父级){
console.log(父级);
if(!(连接中的父节点)){
返回;
}
连接[parent].forEach(prop=>dfs(连接,prop));
}
dfs(connections,1)
您需要从在循环中声明变量的属性开始:for(让i=0;i
否则,您将声明一个全局,它将在递归上受到攻击。请关闭此问题,因为i
是全局使用的。感谢您编辑@NinaScholz帖子。发布后,我正在寻找如何在文本中显示图像。非常感谢您的解释和修复!这有助于我在Js中提高。