#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;
}