【发布时间】:2021-01-05 22:17:31
【问题描述】:
以下是简单问题的示例:
示例 1:查找二叉树的最大深度。
我得到了正确的答案,但不知道为什么我原来的错误答案是错误的。
正确答案:
var maxDepth = function(root) {
if (root === null) return 0;
var maxDepth = 1;
maxDepth = maxDepthHelper(root, 1, maxDepth);
return maxDepth;
};
function maxDepthHelper(tree, depth, maxDepth) {
if (tree.left === null && tree.right === null) {
maxDepth = depth > maxDepth ? depth : maxDepth;
return maxDepth;
}
if (tree.left) {
maxDepth = maxDepthHelper(tree.left, depth + 1, maxDepth);
}
if (tree.right) {
maxDepth = maxDepthHelper(tree.right, depth + 1, maxDepth);
}
return maxDepth;
}
错误答案:
var maxDepth = function(root) {
if (root === null) return 0;
var maxDepth = 1;
maxDepthHelper(root, 1, maxDepth);
return maxDepth;
};
function maxDepthHelper(tree, depth, maxDepth) {
if (tree.left === null && tree.right === null) {
maxDepth = depth > maxDepth ? depth : maxDepth;
return;
}
if (tree.left) {
maxDepthHelper(tree.left, depth + 1, maxDepth);
}
if (tree.right) {
maxDepthHelper(tree.right, depth + 1, maxDepth);
}
}
这与我认为 maxDepth 应该由辅助函数更改并且最终当我返回时它应该返回更改但它没有更改有关。它只返回 1,这是我分配给它的原始内容。但是在下面的示例中,我可以在辅助函数中从父级更改一个变量,那么我在这里缺少什么?
示例 2:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中的第 k 个最小元素。
解决方案:
var kthSmallest = function(root, k) {
let smallestArr = [];
kthSmallestHelper(root, k, smallestArr);
return smallestArr.pop()
};
function kthSmallestHelper(bst, k, array) {
if (bst === null) return;
kthSmallestHelper(bst.left, k, array);
if (array.length === k) return;
array.push(bst.val);
kthSmallestHelper(bst.right, k, array);
}
【问题讨论】:
标签: javascript algorithm recursion data-structures binary-tree