通用树的递归循环
Recursive Loop for Generic Tree
几天来我一直在努力解决以下问题。假设递归函数遍历基本上是树的表示的字典。
输入如下所示:
var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]}
它代表的相应树如下所示:
中间目标是以深度优先搜索的方式打印出数字,即:
我对这个问题的解决方案是:
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;
}
但是,调用函数
dfs(connections, 1)
导致以下结果:
1
2
5
6
7
这意味着它不会返回到上一个函数并继续for循环。如果您有任何想法,我将不胜感激。
干杯
你的i
是隐式全局的,所以在它遍历2
(长度为3)之后,i
是4,所以进一步测试i < connections[parent].length
失败。
您可以使用 let
来修复它 (for (let i = 0
),但使用 forEach
可能会更好:数组方法更简洁,更不容易出错,比 for
循环更实用:
var connections = {
1: [2, 3, 4],
2: [5, 6, 7],
3: [8],
4: [9, 10]
}
function dfs(connections, parent) {
console.log(parent);
if (!(parent in connections)) {
return;
}
connections[parent].forEach(prop => dfs(connections, prop));
}
dfs(connections, 1)
几天来我一直在努力解决以下问题。假设递归函数遍历基本上是树的表示的字典。
输入如下所示:
var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]}
它代表的相应树如下所示:
中间目标是以深度优先搜索的方式打印出数字,即:
我对这个问题的解决方案是:
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;
}
但是,调用函数
dfs(connections, 1)
导致以下结果:
1
2
5
6
7
这意味着它不会返回到上一个函数并继续for循环。如果您有任何想法,我将不胜感激。
干杯
你的i
是隐式全局的,所以在它遍历2
(长度为3)之后,i
是4,所以进一步测试i < connections[parent].length
失败。
您可以使用 let
来修复它 (for (let i = 0
),但使用 forEach
可能会更好:数组方法更简洁,更不容易出错,比 for
循环更实用:
var connections = {
1: [2, 3, 4],
2: [5, 6, 7],
3: [8],
4: [9, 10]
}
function dfs(connections, parent) {
console.log(parent);
if (!(parent in connections)) {
return;
}
connections[parent].forEach(prop => dfs(connections, prop));
}
dfs(connections, 1)