#include <iostream>
using namespace std;
class BinaryTreeNode
{
private:
unsigned int value;
BinaryTreeNode* leftNode;
BinaryTreeNode* rightNode;
public:
BinaryTreeNode(unsigned int value) : leftNode(NULL), rightNode(NULL)
{
this->value = value;
};
~BinaryTreeNode()
{
cout << "delete node (" << value << ")" << endl;
if(leftNode != NULL)
{
delete leftNode;
leftNode = NULL;
}
if(rightNode != NULL)
{
delete rightNode;
rightNode = NULL;
}
};
unsigned int getValue()
{
return value;
}
BinaryTreeNode* getLeftNode()
{
return leftNode;
};
BinaryTreeNode* getRightNode()
{
return rightNode;
};
};
class BinaryTree
{
BinaryTreeNode* rootNode;
public:
BinaryTree() : rootNode(NULL)
{
};
~BinaryTree()
{
if(rootNode != NULL)
{
delete rootNode;
rootNode = NULL;
}
};
void addNode(unsigned int value)
{
addNode(value, rootNode);
};
void addNode(unsigned int value, BinaryTreeNode* rootNode)
{
if(rootNode == NULL)
{
rootNode = new BinaryTreeNode(value);
}
else
{
if(value < rootNode->getValue())
{
addNode(value, rootNode->getLeftNode());
}
else if(value > rootNode->getValue())
{
addNode(value, rootNode->getRightNode());
}
else
{
cout << "thers is node with "<< value << " value already" << endl;
}
}
};
void searchNode(unsigned int value)
{
searchNode(value, rootNode);
};
void searchNode(unsigned int value, BinaryTreeNode* rootNode)
{
if(rootNode == NULL)
{
cout << "no match" << endl;
}
else
{
if(value < rootNode->getValue())
{
searchNode(value, rootNode->getLeftNode());
}
else if(value > rootNode->getValue())
{
searchNode(value, rootNode->getRightNode());
}
else
{
cout << "value found! left : " << rootNode->getLeftNode()->getValue() << ", right : " << rootNode->getRightNode()->getValue() << endl;
}
}
};
};
int main()
{
BinaryTree tree;
tree.addNode(100);
tree.addNode(10);
tree.addNode(10);
tree.addNode(15);
tree.addNode(150);
tree.addNode(180);
tree.addNode(140);
tree.searchNode(100);
tree.searchNode(10);
return 0;
}