2017-09-18 89 views
0

所以我应该编写一个程序在二叉搜索树中打印第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); 
} 

回答

0

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); 
}