#include <iostream>
using namespace std;
class Node {
public:
int data;
Node *left;
Node *right;
};
Node* GetNewNode(int data) {
Node *newNode = new Node();
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void Insert(Node **root, int data)
{
if (*root == NULL) { // empty tree
*root = GetNewNode(data);
}
else if ((*root)->data < data) {
Insert(&((*root)->left), data);
}
else {
Insert(&((*root)->right), data);
}
}
int main(int argc, char *argv[])
{
Node *treeRoot = NULL;
Insert(&treeRoot, 15);
Insert(&treeRoot, 23);
Insert(&treeRoot, 10);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTm9kZSB7CnB1YmxpYzoKICAgIGludCBkYXRhOwogICAgTm9kZSAqbGVmdDsKICAgIE5vZGUgKnJpZ2h0Owp9OwoKTm9kZSogR2V0TmV3Tm9kZShpbnQgZGF0YSkgewogICAgTm9kZSAqbmV3Tm9kZSA9IG5ldyBOb2RlKCk7CiAgICBuZXdOb2RlLT5kYXRhID0gZGF0YTsKICAgIG5ld05vZGUtPmxlZnQgPSBOVUxMOwogICAgbmV3Tm9kZS0+cmlnaHQgPSBOVUxMOwogICAgcmV0dXJuIG5ld05vZGU7Cn0KCnZvaWQgSW5zZXJ0KE5vZGUgKipyb290LCBpbnQgZGF0YSkgCnsKICAgIGlmICgqcm9vdCA9PSBOVUxMKSB7IC8vIGVtcHR5IHRyZWUKICAgICAgICAqcm9vdCA9IEdldE5ld05vZGUoZGF0YSk7CiAgICB9CiAgICBlbHNlIGlmICgoKnJvb3QpLT5kYXRhIDwgZGF0YSkgewogICAgICAgIEluc2VydCgmKCgqcm9vdCktPmxlZnQpLCBkYXRhKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEluc2VydCgmKCgqcm9vdCktPnJpZ2h0KSwgZGF0YSk7CiAgICB9Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIE5vZGUgKnRyZWVSb290ID0gTlVMTDsKCiAgICBJbnNlcnQoJnRyZWVSb290LCAxNSk7CiAgICBJbnNlcnQoJnRyZWVSb290LCAyMyk7CiAgICBJbnNlcnQoJnRyZWVSb290LCAxMCk7Cgp9