}
}
}
}
treenode* bisorttree::searchparent(treenode* head,treenode* p)
{
if(head->left==p||head->right==p||head==p||head==null)
return head;
else
{
if(p->key<head->key)
return searchparent(head->left ,p);
else
return searchparent(head->right ,p);
}
}
treenode* bisorttree::searchminright(treenode* head)//找到右子树中最小的节点
{
if(head->left ==null||head==null)
{
return head;
}
else
{
return searchminright(head->left);
}
}
/*****************以下是显示一个二叉排序树****************************************/
void bisorttree::desplaytree(void)
{
showtree(head);
cout<<endl;
}
void bisorttree::showtree(treenode* head)
{
if(head!=null)
{
showtree(head->left ) ;
cout<<head->key<<' ' ;
showtree(head->right) ;
}
}
/*****************以下是删除一棵整二叉排序树************************************/
bisorttree::~bisorttree()
{
cout<<"已经消除了一棵树!!!!"<<endl;
destroytree(head);
}
void bisorttree::destroytree(treenode* head )
{
if(head!=null)
{
destroytree(head->left );
destroytree(head->right );
delete head;
}
}
/*********************/
void print()
{
cout<<endl<<endl<<"以下是对二叉排序树的基本操作:"<<endl
<<"1.显示树"<<endl
<<"2.插入一个节点"<<endl
<<"3.寻找一个节点"<<endl
<<"4.删除一个节点"<<endl;
}
void main()
{
bisorttree tree;
int number;
int choicenumber;
char flag;
while(1)
{
print() ;
cout<<"请选择你要进行的操作(1~4)"<<endl;
cin>>choicenumber;
switch(choicenumber)
{
case 1:
tree.desplaytree();break;
case 2:
cout<<"请插入一个数: "<<endl;
cin>>number;
tree.inserttree(number);
tree.desplaytree();
break;
case 3:
cout<<"请插入你要找数: "<<endl;
cin>>number;
if(tree.searchtree(number)==null)
{
cout<<"没有发现"<<endl;
}
else
{
cout<<"发现"<<endl;
}
break;
case 4:
cout<<"请输入你要删除的数: "<<endl;
cin>>number;
tree.deletetree(number);
tree.desplaytree();
break;
default: break;
}
cout<<"你是否要继续(y/n)?"<<endl;
cin>>flag;
if(flag=='n'||flag=='n')
break;
}