给定一个二进制搜索树,找到包含第K个最大键的节点。

给定一个二进制搜索树,找到包含第K个最大键的节点。
函数KthLargest应该返回指向包含二进制搜索树T中第K个最大键的节点的指针。
这里T不是空的,它的所有键都是不同的正整数。K是正的,并且永远不超过树中节点的总数。

#include 
#include 

typedef struct TNode *BinTree;
struct TNode{
    int Key;
    BinTree Left;
    BinTree Right;
};

BinTree BuildTree(); /* details omitted */
BinTree KthLargest ( BinTree T, int K );

int main()
{
    BinTree T, P;
    int K;

    T = BuildTree();
    scanf("%d", &K);
    P = KthLargest(T, K);
    printf("%d\n", P->Key);
    if (P->Left) printf("%d\n", P->Left->Key);
    else printf("NULL\n");
    if (P->Right) printf("%d\n", P->Right->Key);
    else printf("NULL\n");

    return 0;
}//以上为题目代码
/* Your function will be put here */

下面是我的答案代码


int n=0;
BinTree KthLargest(BinTree T, int K) {
    if(T ==NULL)return NULL;
    KthLargest(T->Right, K);
    n++;
    if(n==K){
    return T;
    }
    KthLargest(T->Left, K);
}

在PTA上部分答案正确,但存在段错误现象
希望得到出错代码是那一部分和如何修改

 
int n=0;
BinTree KthLargest(BinTree T, int K) {
    if(T ==NULL)
         return NULL;
    BinTree t = KthLargest(T->Right, K);
    if(t != NULL)
         return t;
    n++;
    if(n==K){
    return t;
    }
    t = KthLargest(T->Left, K);
    if(t != NULL)
          return t;
}

这样试试呢