【发布时间】:2019-12-06 10:02:00
【问题描述】:
我得到的路径是错误的——递归不会在结束条件下停止。我有一个这样定义的树节点:
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
一棵树:
还有一个功能:
const getPath = function(root, node) {
let path = [];
const traverse = function(root, node) {
if (root.left || root.right) {
path.push(root.val);
}
if (root.val === node.val) {
path.push(root.val);
return;
}
if (root.left) {
traverse(root.left, node);
}
if (root.right) {
traverse(root.right, node);
}
};
traverse(root, node);
return path;
};
如果我想获取元素7 的路径,输出将是[3, 5, 2, 7],因为这是从根到该节点的路径。
但我的函数的输出是 [3, 5, 2, 7, 1],而不是 - 它似乎不会在返回条件上停止,而是继续使用堆栈中的任何内容。
这段代码有什么问题?
我图片中的树示例:
const T = new TreeNode(3);
T.left = new TreeNode(5);
T.right = new TreeNode(1);
T.left.left = new TreeNode(6);
T.left.right = new TreeNode(2);
T.left.right.left = new TreeNode(7);
T.left.right.right = new TreeNode(4);
T.right.left = new TreeNode(0);
T.right.right = new TreeNode(8);
const node = T.left.right.left;
const path = getPath(T, node); // [3, 5, 2, 7, 1]
【问题讨论】: