如何解决javascript - 搜索二叉树的最大深度时,递归函数如何计数
var maxDepth = function(root) {
const recursion = (n) => {
if (!n) return 0;
let left = recursion(n.left)
let right = recursion(n.right)
return left > right ? left + 1 : right + 1
}
return recursion(root)
};
在调用递归函数时,它是如何计数的?我已经看到了很多其他方法来找到二叉树的最大深度,并且所有的递归函数都是自己计算的。任何人都可以请解释这是如何工作的吗?函数调用加 1 是如何工作的?
这是另一种搜索方法
maxDepth() {
if (!this.root) return 0;
function maxDepthHelper(node) {
if (node.left === null && node.right === null) return 1;
if (node.left === null) return maxDepthHelper(node.right) + 1;
if (node.right === null) return maxDepthHelper(node.left) + 1;
return (
Math.max(maxDepthHelper(node.left),maxDepthHelper(node.right)) + 1
);
}
return maxDepthHelper(this.root);
}
这是二叉树类方法的一部分
解决方法
你问,“函数调用加 1 是如何工作的?”请注意,maxDepthHelper(...)
返回一个数字。所以,发生的事情是函数调用的 result 是一个数字,该结果是增加 1 的结果。所以,如果在特定情况下 maxDepthHelper(...)
产生 6,那么 { {1}} 只是 7。
对于您更一般的问题,“它是如何计数的?”它没有。调用堆栈将包含许多对 maxDepthHelper(...) + 1
的递归调用,其中许多调用将在返回值上执行 maxDepthHelper
。这些添加堆积起来,最终产生最终结果。同样的想法在这里:
+ 1
这里没有什么是“跟踪”的。 const count = (n = 0) => {
if (n < 1000) {
return count(n + 1)
}
return n
}
count() // 1000
变量被传递,它的值随着调用堆栈变大而累积。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。