#include <iostream>
using namespace std;
struct BinaryTreeNode
{
int value;
BinaryTreeNode * left;
BinaryTreeNode * right;
BinaryTreeNode(int v)
{
value = v;
left = right = NULL;
}
};
class BinaryTree
{
private:
BinaryTreeNode * root;
void preOrder(BinaryTreeNode * node)
{
if (node == NULL)
return;
cout<<node->value<<" ";
preOrder(node->left);
preOrder(node->right);
}
void inOrder(BinaryTreeNode * node)
{
if (node == NULL)
return;
inOrder(node->left);
cout<<node->value<<" ";
inOrder(node->right);
}
void postOrder(BinaryTreeNode * node)
{
if (node == NULL)
return;
postOrder(node->left);
postOrder(node->right);
cout<<node->value<<" ";
}
void insert(BinaryTreeNode * node, int value)
{
if (node == NULL)
return;
if (value < node->value)
{
if (node->left == NULL)
{
node->left = new BinaryTreeNode(value);
return;
}
insert(node->left, value);
}
else if (value > node->value)
{
if (node->right == NULL)
{
node->right = new BinaryTreeNode(value);
return;
}
insert(node->right, value);
}
else
{
cout<<"insert Error"<<endl;
}
}
void deleteNode(BinaryTreeNode * node)
{
if (node == NULL)
return;
deleteNode(node->left);
deleteNode(node->right);
delete node;
}
bool search(BinaryTreeNode * node, int value)
{
if (node == NULL)
return false;
if (value < node->value)
search(node->left, value);
else if (value > node->value)
search(node->right, value);
else
return true;
}
public:
BinaryTree()
{
root = NULL;
}
~BinaryTree()
{
if (root != NULL)
deleteNode(root);
}
void Insert(int value)
{
if (root == NULL)
root = new BinaryTreeNode(value);
else
insert(root, value);
}
void PreOrder()
{
preOrder(root);
cout<<endl;
}
void InOrder()
{
inOrder(root);
cout<<endl;
}
void PostOrder()
{
postOrder(root);
cout<<endl;
}
bool Search(int value)
{
return search(root, value);
}
};
int main()
{
BinaryTree b;
b.Insert(2);
b.Insert(4);
b.Insert(1);
b.Insert(3);
b.PreOrder();
b.InOrder();
b.PostOrder();
cout<<b.Search(1)<<endl;
return 0;
}
crack the code interview —— binarytree
最新推荐文章于 2014-03-11 20:08:41 发布