2017-09-18 19 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 변수는 로컬 함수 매개 변수이므로 수정할 때 새로운 값은 상위 수준에서 사용할 수 없습니다. 당신은 다음의 값을 한 수준 위로 갈 때 즉, 그

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); 
} 
과 같이해야합니다 1.

으로 재설정