#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
= ( int * ) malloc ( sizeof ( int ) ) ; i = 1 ;
printf ( "%d" , KthSmallestElement
( root
,& i
, 5 ) ) ;
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWFsbG9jLmg+CgpzdHJ1Y3Qgbm9kZQp7CiAgaW50IGRhdGE7CiAgc3RydWN0IG5vZGUqIGxlZnQ7CiAgc3RydWN0IG5vZGUqIHJpZ2h0OwogIHN0cnVjdCBub2RlKiBuZXh0Owp9OwoKdHlwZWRlZiBzdHJ1Y3Qgbm9kZSBOb2RlOwoKdm9pZCBBZGROb2RlKE5vZGUqIHJvb3QsIGludCBudW1iZXIpCnsJCglpZihyb290LT5kYXRhPT1udW1iZXIpCgkJcmV0dXJuOwoJZWxzZSBpZihyb290LT5kYXRhPm51bWJlcikKCXsKCQlpZihyb290LT5sZWZ0IT1OVUxMKQoJCXsKCQkJQWRkTm9kZShyb290LT5sZWZ0LG51bWJlcik7CgkJfQoJCWVsc2UKCQl7CgkJCU5vZGUqIG5ld05vZGUgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CgkJCW5ld05vZGUtPmRhdGEgPSBudW1iZXI7CgkJCW5ld05vZGUtPmxlZnQgPSBOVUxMOwoJCQluZXdOb2RlLT5yaWdodD0gTlVMTDsKCQkJbmV3Tm9kZS0+bmV4dD0gTlVMTDsKCQkJcm9vdC0+bGVmdCA9IG5ld05vZGU7CgkJfQoJfQoJZWxzZSBpZihyb290LT5kYXRhPG51bWJlcikKCXsKCQlpZihyb290LT5yaWdodCE9TlVMTCkKCQl7CgkJCUFkZE5vZGUocm9vdC0+cmlnaHQsbnVtYmVyKTsKCQl9CgkJZWxzZQoJCXsKCQkJTm9kZSogbmV3Tm9kZSA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCQkJbmV3Tm9kZS0+ZGF0YSA9IG51bWJlcjsKCQkJbmV3Tm9kZS0+bGVmdCA9IE5VTEw7CgkJCW5ld05vZGUtPnJpZ2h0PSBOVUxMOwoJCQluZXdOb2RlLT5uZXh0PSBOVUxMOwoJCQlyb290LT5yaWdodD0gbmV3Tm9kZTsKCQl9Cgl9Cn0KCmludCBLdGhTbWFsbGVzdEVsZW1lbnQoTm9kZSAqcm9vdCxpbnQqIGN1cnJlbnRFbGVtZW50TnVtYmVyLGludCBrKQp7CglpZihyb290PT1OVUxMKQoJCXJldHVybiAtMTsKCWVsc2UKCXsKCQlpbnQgaSA9IEt0aFNtYWxsZXN0RWxlbWVudChyb290LT5sZWZ0LCZjdXJyZW50RWxlbWVudE51bWJlcixrKTsKCQlpZihpPT0tMSkKCQl7CgkJCWlmKGN1cnJlbnRFbGVtZW50TnVtYmVyPT1rKQoJCQkJcmV0dXJuIHJvb3QtPmRhdGE7CgkJCWVsc2UKCQkJCWN1cnJlbnRFbGVtZW50TnVtYmVyKys7CgkJCXJldHVybiBLdGhTbWFsbGVzdEVsZW1lbnQocm9vdC0+cmlnaHQsJmN1cnJlbnRFbGVtZW50TnVtYmVyLGspOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gaTsKCQl9Cgl9Cn0KCgoKaW50IG1haW4oKQp7CglOb2RlKiByb290ID0gKE5vZGUqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwoJcm9vdC0+ZGF0YSA9IDQ7Cglyb290LT5sZWZ0ID0gTlVMTDsKCXJvb3QtPnJpZ2h0PSBOVUxMOwoJcm9vdC0+bmV4dD0gTlVMTDsKCglBZGROb2RlKHJvb3QsMyk7CglBZGROb2RlKHJvb3QsNyk7CglBZGROb2RlKHJvb3QsMSk7CglBZGROb2RlKHJvb3QsMik7CglBZGROb2RlKHJvb3QsNik7CglBZGROb2RlKHJvb3QsOSk7CglBZGROb2RlKHJvb3QsMTcpOwoJQWRkTm9kZShyb290LDExKTsKCUFkZE5vZGUocm9vdCwxMCk7CglBZGROb2RlKHJvb3QsMyk7CglBZGROb2RlKHJvb3QsNCk7CgkKCWludCAqaSA9IChpbnQqKW1hbGxvYyhzaXplb2YoaW50KSk7CglpID0gMTsKCXByaW50ZigiJWQiLEt0aFNtYWxsZXN0RWxlbWVudChyb290LCZpLDUpKTsKCiAKICByZXR1cm4gMDsKfQ==