因为比较简单,所以注释不多
// Author: sky
// Date: 2011.11.10
// Content: BinarySortTree
///
#include <iostream>
using namespace std;
typedef int ElementType;
typedef struct Node
{
ElementType data;
Node *lChild;
Node *rChild;
}*TreeNode;
struct BinarySortTree
{
BinarySortTree()
{
root=NULL;
}
bool Insert(TreeNode &node,ElementType element);
bool Search(TreeNode &node,ElementType element);
bool Delete(TreeNode &node,ElementType element);
void Travel(TreeNode &node);
TreeNode root;
};
bool BinarySortTree::Insert(TreeNode &node,ElementType element)
{
bool result=false;
if (node==NULL)
{
node=new Node();
node->data=element;
node->lChild=NULL;
node->rChild=NULL;
result=true;
}
else
{
if(node->data>element)
{
result=Insert(node->lChild,element);
}
else
{
result=Insert(node->rChild,element);
}
}
return result;
}
bool BinarySortTree::Search(TreeNode &node,ElementType element)
{
bool result=false;
if (node!=NULL)
{
if (node->data==element)
{
result=true;
}
else if(node->data>element)
{
result=Search(root->lChild,element);
}
else
{
result=Search(node->rChild,element);
}
}
else
{
return false;
}
return result;
}
bool BinarySortTree::Delete(TreeNode &node,ElementType element)
{
bool result=false;
TreeNode q=NULL,s=NULL;
if (node!=NULL)
{
if (node->data==element)//删除节点的关键部分
{
q=node;
//下面分情况讨论如何删除节点
if (node->rChild==NULL)
{
node=node->lChild;
}
else if(!node->lChild==NULL)
{
node=node->rChild;
}
else
{
//当左右节点都不为空时,就应该把左子树最右边的孩子的数值放到这儿
node=node->lChild;
while(node->rChild!=NULL)
{
s=node;// 使用s来标记node父节点
node=node->rChild;
}
if (node->lChild==NULL)
{
s->rChild=NULL;
}
else
{
s->rChild=node->lChild;
}
q->data=node->data;
q=node;//此处 delete掉的其实是左子树最右边的节点
}
delete(q);
result=true;
}
else if (node->data>element)
{
result=Delete(node->lChild,element);
}
else
{
result=Delete(node->rChild,element);
}
}
return result;
}
void BinarySortTree::Travel(TreeNode &node)
{
if (node!=NULL)
{
Travel(node->lChild);
cout<<node->data<<" ";
Travel(node->rChild);
}
}
int main(int agrc,char * argv[])
{
BinarySortTree tree;
cout<<"Input the node Number of Tree ";
int count=0;
ElementType tem;
cin>>count;
for (int i=0;i<count;i++)
{
cout<<"\n\tPlease Input the value :";
cin>>tem;
tree.Insert(tree.root,tem);
}
cout<<"\nPrint the BinaryTree :\n";
tree.Travel(tree.root);
cout<<"Input the element what you want to search :";
cin>>tem;
if (tree.Search(tree.root,tem)==false)
{
cout<<"Search Failed ";//查找节点,如果节点不存在就添加新的节点
if (tree.Insert(tree.root,tem)==true)
{
cout<<"\nNew Node has been added\n";
}
else
{
cout<<"\nAdd Failed\n";
}
}
tree.Travel(tree.root);
cout<<"\nInput the element what you want to Delete :";
cin>>tem;
if (tree.Delete(tree.root,tem)==false)
{
cout<<"\nDelete Failed ";
return 0;
}
else
{
cout<<"\nDelete Finished"<<endl;
}
tree.Travel(tree.root);
return 0;
}