#include<stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node* left;
struct node* right;
struct node* next;
};
typedef struct node Node;
void AddNode(Node* root, int number)
{
if(root->data==number)
return;
else if(root->data>number)
{
if(root->left!=NULL)
{
AddNode(root->left,number);
}
else
{
Node
* newNode
= (Node
*)malloc(sizeof(Node
)); newNode->data = number;
newNode->left = NULL;
newNode->right= NULL;
newNode->next= NULL;
root->left = newNode;
}
}
else if(root->data<number)
{
if(root->right!=NULL)
{
AddNode(root->right,number);
}
else
{
Node
* newNode
= (Node
*)malloc(sizeof(Node
)); newNode->data = number;
newNode->left = NULL;
newNode->right= NULL;
newNode->next= NULL;
root->right= newNode;
}
}
}
int KthSmallestElement(Node *root,int* currentElementNumber,int k)
{
if(root==NULL)
return -1;
else
{
int i = KthSmallestElement(root->left,currentElementNumber,k);
if(i==-1)
{
if(*currentElementNumber==k)
return root->data;
else
currentElementNumber++;
return KthSmallestElement(root->right,currentElementNumber,k);
}
else
{
return i;
}
}
}
int main()
{
Node
* root
= (Node
*)malloc(sizeof(Node
)); root->data = 4;
root->left = NULL;
root->right= NULL;
root->next= NULL;
AddNode(root,3);
AddNode(root,7);
AddNode(root,1);
AddNode(root,2);
AddNode(root,6);
AddNode(root,9);
AddNode(root,17);
AddNode(root,11);
AddNode(root,10);
AddNode(root,3);
AddNode(root,4);
int i = 1;
printf("%d",KthSmallestElement
(root
,&i
,5));
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWFsbG9jLmg+CgpzdHJ1Y3Qgbm9kZQp7CiAgaW50IGRhdGE7CiAgc3RydWN0IG5vZGUqIGxlZnQ7CiAgc3RydWN0IG5vZGUqIHJpZ2h0OwogIHN0cnVjdCBub2RlKiBuZXh0Owp9OwoKdHlwZWRlZiBzdHJ1Y3Qgbm9kZSBOb2RlOwoKdm9pZCBBZGROb2RlKE5vZGUqIHJvb3QsIGludCBudW1iZXIpCnsJCglpZihyb290LT5kYXRhPT1udW1iZXIpCgkJcmV0dXJuOwoJZWxzZSBpZihyb290LT5kYXRhPm51bWJlcikKCXsKCQlpZihyb290LT5sZWZ0IT1OVUxMKQoJCXsKCQkJQWRkTm9kZShyb290LT5sZWZ0LG51bWJlcik7CgkJfQoJCWVsc2UKCQl7CgkJCU5vZGUqIG5ld05vZGUgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CgkJCW5ld05vZGUtPmRhdGEgPSBudW1iZXI7CgkJCW5ld05vZGUtPmxlZnQgPSBOVUxMOwoJCQluZXdOb2RlLT5yaWdodD0gTlVMTDsKCQkJbmV3Tm9kZS0+bmV4dD0gTlVMTDsKCQkJcm9vdC0+bGVmdCA9IG5ld05vZGU7CgkJfQoJfQoJZWxzZSBpZihyb290LT5kYXRhPG51bWJlcikKCXsKCQlpZihyb290LT5yaWdodCE9TlVMTCkKCQl7CgkJCUFkZE5vZGUocm9vdC0+cmlnaHQsbnVtYmVyKTsKCQl9CgkJZWxzZQoJCXsKCQkJTm9kZSogbmV3Tm9kZSA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCQkJbmV3Tm9kZS0+ZGF0YSA9IG51bWJlcjsKCQkJbmV3Tm9kZS0+bGVmdCA9IE5VTEw7CgkJCW5ld05vZGUtPnJpZ2h0PSBOVUxMOwoJCQluZXdOb2RlLT5uZXh0PSBOVUxMOwoJCQlyb290LT5yaWdodD0gbmV3Tm9kZTsKCQl9Cgl9Cn0KCmludCBLdGhTbWFsbGVzdEVsZW1lbnQoTm9kZSAqcm9vdCxpbnQqIGN1cnJlbnRFbGVtZW50TnVtYmVyLGludCBrKQp7CglpZihyb290PT1OVUxMKQoJCXJldHVybiAtMTsKCWVsc2UKCXsKCQlpbnQgaSA9IEt0aFNtYWxsZXN0RWxlbWVudChyb290LT5sZWZ0LGN1cnJlbnRFbGVtZW50TnVtYmVyLGspOwoJCWlmKGk9PS0xKQoJCXsKCQkJaWYoKmN1cnJlbnRFbGVtZW50TnVtYmVyPT1rKQoJCQkJcmV0dXJuIHJvb3QtPmRhdGE7CgkJCWVsc2UKCQkJCWN1cnJlbnRFbGVtZW50TnVtYmVyKys7CgkJCXJldHVybiBLdGhTbWFsbGVzdEVsZW1lbnQocm9vdC0+cmlnaHQsY3VycmVudEVsZW1lbnROdW1iZXIsayk7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiBpOwoJCX0KCX0KfQoKCgppbnQgbWFpbigpCnsKCU5vZGUqIHJvb3QgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7Cglyb290LT5kYXRhID0gNDsKCXJvb3QtPmxlZnQgPSBOVUxMOwoJcm9vdC0+cmlnaHQ9IE5VTEw7Cglyb290LT5uZXh0PSBOVUxMOwoKCUFkZE5vZGUocm9vdCwzKTsKCUFkZE5vZGUocm9vdCw3KTsKCUFkZE5vZGUocm9vdCwxKTsKCUFkZE5vZGUocm9vdCwyKTsKCUFkZE5vZGUocm9vdCw2KTsKCUFkZE5vZGUocm9vdCw5KTsKCUFkZE5vZGUocm9vdCwxNyk7CglBZGROb2RlKHJvb3QsMTEpOwoJQWRkTm9kZShyb290LDEwKTsKCUFkZE5vZGUocm9vdCwzKTsKCUFkZE5vZGUocm9vdCw0KTsKCQoJaW50IGkgPSAxOwoJcHJpbnRmKCIlZCIsS3RoU21hbGxlc3RFbGVtZW50KHJvb3QsJmksNSkpOwoKIAogIHJldHVybiAwOwp9