#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
Node *left, *right;
};
Node* createNode(
int
item)
{
Node* temp =
new
Node;
temp->data = item;
temp->left = temp->right = NULL;
return
temp;
}
Node* add(Node* node,
int
key)
{
if
(node == NULL)
return
createNode(key);
if
(key < node->data)
node->left = add(node->left, key);
else
if
(key > node->data)
node->right = add(node->right, key);
return
node;
}
int
findMinforN(Node* root,
int
N)
{
if
(root->left == NULL && root->right == NULL
&& root->data < N)
return
-1;
if
((root->data >= N && root->left == NULL)
|| (root->data >= N && root->left->data < N))
return
root->data;
if
(root->right!=NULL and root->data <= N)
return
findMinforN(root->right, N);
else
if
(root->left!=NULL)
return
findMinforN(root->left, N);
}
int
main()
{
Node* root = NULL;
root = add(root, 19);
root = add(root, 7);
root = add(root, 3);
root = add(root, 11);
root = add(root, 9);
root = add(root, 13);
root = add(root, 21);
int
N = 18;
cout << findMinforN(root, N) << endl;
return
0;
}