给定一个二进制搜索树,找到包含第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;
}
这样试试呢