为什么我的程序返回BST中第k个最小的元素不起作用?
问题描述:
所以我应该编写一个程序在二叉搜索树中打印第k个最小的元素。这是我的代码。可悲的是,我一直盯着我的代码45分钟,我似乎无法找到我的错误。有人可以帮我吗?为什么我的程序返回BST中第k个最小的元素不起作用?
let res;
function kthLargestInBST(t, k) {
helper(t, k, 1);
return res;
}
function helper(t, k, curr) {
if (t === null) return;
helper(t.left, k, curr);
if (curr === k) {
res = t.value;
}
curr++;
helper(t.right, k, curr);
}
答
curr变量是本地函数参数,当您修改它时,它的新值在上层不可用。换句话说,当你去一个级别,然后它的值被重置为1
必须是类似的东西
function kthLargestInBST(t, k) {
var q = {curr:1, res:null}
helper(t, k, q);
return q.res;
}
// returns true if found the result
function helper(t, k, q) {
if (t === null) return false;
if (helper(t.left, k, q)) return true;
if (q.curr === k) {
q.res = t.value;
return true;
}
q.curr++;
return helper(t.right, k, q);
}