I tried 2 approaches to solve this. Upon manual testing, the solution shows the correct answer yet on submitting it isn’t getting accepted.
my code :
#include<stdio.h>
#include<stdlib.h>
struct node
{
int key;
struct node *left, *right;
int leftsize;
};
int ind=0;
int flag=0;
int count=0;
struct node *newNode(int item)
{
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp->key = item;
temp->left = temp->right = NULL;
temp->leftsize=1;
return temp;
}
int size(struct node* node)
{
if (node == NULL)
return 0;
else
return(size(node->left) + 1 + size(node->right));
}
struct node* insert(struct node* node, int value)
{
if (node == NULL) {
struct node* x = newNode(value);
x->leftsize=size(x);
return x;
}
else if (value < node->key) {
node->left = insert(node->left, value);
node->leftsize++;
}
else if (value > node->key) {
node->right = insert(node->right, value);
// node->right->leftsize=node->leftsize+1;
}
return node;
}
void search(struct node* node,int value){
if (node == NULL) {
return;
}
else if(value==node->key){
printf("%d\n",count-(ind+node->leftsize)+1);
flag=-1;
return;
}
else if (value < node->key)
search(node->left, value);
else if (value > node->key) {
ind+=node->leftsize;
search(node->right, value);
}
return;
}
/* void Inorder(struct node* node,int value)
{
if (node == NULL)
return;
Inorder(node->right,value);
ind++;
if(node->key==value){
printf("%d\n",ind);
flag=-1;
return;
}
Inorder(node->left,value);
} */
int main()
{
struct node *root = NULL;
int q,option,val;
scanf("%d",&q);
while(q>0){
scanf("%d",&option);
if(option==1){
scanf("%d",&val);
root = insert(root, val);
count++;
}
else if (option==2){
scanf("%d",&val);
ind=0;
flag=0;
search(root,val);
if(flag==0){
printf("Data tidak ada\n");
}
}
q--;
}
return 0;
}