二叉排序树问题
我自己写了一个二叉排序树,调试了老半天还是有如下错误,谁能告诉我这是什么错误
--------------------Configuration: 二叉排序树 方法 - Win32 Debug--------------------
Compiling...
二叉排序树 方法.cpp
E:\编程练习\二叉排序树 方法.cpp(70) : error C2447: missing function header (old-style formal list?)
E:\编程练习\二叉排序树 方法.cpp(122) : error C2447: missing function header (old-style formal list?)
E:\编程练习\二叉排序树 方法.cpp(136) : error C2447: missing function header (old-style formal list?)
E:\编程练习\二叉排序树 方法.cpp(218) : error C2601: 'main' : local function definitions are illegal
E:\编程练习\二叉排序树 方法.cpp(272) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.
二叉排序树 方法.exe - 1 error(s), 0 warning(s)
#include<iostream>
using namespace std;
struct treenode
{
treenode *lchild;
treenode *rchild;
int data;
};
class Bitree
{
public:
Bitree();
treenode *getroot()
{
return B;
}
void midle(treenode *B);
treenode *insertNode(int k);
void delNode(int k);
treenode* search(int k);
private:
void Bitree::delNode(treenode *B,treenode *f,int k);//删除值为k的结点
treenode* Bitree::search(treenode *B,int k);//查找值为k的结点
void Bitree:: buildtree(treenode *s,treenode *B);
treenode *Bitree::searchparent(treenode *B,int k);//查找p的父亲结点
treenode *Bitree::insertNode(int k,treenode *B);//插入值为k的结点
treenode *B;//二叉排序树头结点
};
void Bitree::buildtree(treenode *s,treenode *B)
{
if(s->data>B->data)
{
B->rchild=s;
}
else
{
B->lchild=s;
}
}
Bitree::Bitree( )
{
int k;
cout<<"输入你要建立的二叉排序树的值,按ctrl+Z结束"<<endl;
B=NULL;
while(cin>>k)
{
treenode *s;
s=new treenode;
s->data=k;
s->lchild=s->rchild=NULL;
if(B==NULL)
{
B=s;
continue;
}
buildtree(s,B);
}
}
void Bitree:: midle(treenode *B);
{
if(B==NULL)
return ;
else
{
midle(B->lchild);
cout<<B->data;
midle(B->rchild);
}
}
treenode * Bitree::insertNode(int k)
{
insertNode( k,B);
}
treenode *Bitree::insertNode(int k,treenode *B)
{
if(B==NULL)
return NULL;
else
{
if(k<B->data)
return insertNode(k,B->lchild);
else return insertNode(k,B->rchild);
}
}
treenode *Bitree::search(treenode *B,int k)
{
if(B==NULL)
return NULL;
if(k<B->data)
search(B->lchild,k);
if(k>B->data)
search(B->rchild,k);
else
return B;
}
treenode* Bitree::search( int k)
{
returnsearch(B,k);
}
treenode* Bitree::searchparent(treenode *B,int k);
{
if(B==NULL)
return NULL;
else if(B->lchild==k||B->rchild==k)
return B;
else if(k<B->data)
return searchparent(B-lchild, k);
else
return searchparent(B->rchild,k);
}
void Bitree::delNode(int k);
{
treenode *p,*f;
p=search(B,k);
f=searchparent(B,k);
if(p==NULL||f==NULL)
{
cout<<"要删除的值不存在"<<endl;
return NULL;
}
delNode(p,k);
}
void Bitree::delNode(treenode *p,treenode *f,int k)
{
if(p==B)
{
B=NULL;
}
else
{
if(!p->lchild&&!p->rchild)
{
f->lchild=NULL;
delete p;
}
else if(!p->rchild)
{
if(f->lchild==p)
{
f->lchild=p->lchild;
}
else if(f->rchild==p)
{
f->rchild=p->lchild;
}
}
else if(!p->lchild)
{
if(f->lchild==p)
{
f->lchild=p->rchild;
}
else if(p->rchild==p)
{
f->rchild=p->rchild;
}
}
else
{
treenode *par;
par=p;
treenode *s;
s=p->rchild;
while(s->lchild!=NULL)
{
par=s;
s=s->lchild;
}
p->data=s->data;
if(par==s)
{
par->rchild=s->rchild;
}
else
par->lchild=s->rchild;
delete s;
}
}
void main()
{
Bitree Bisortree;
int k;
char ch;
cout<<"输入你你要查找的值"<<endl;
cin>>k;
treenode *p=Bisortree.search(k);
if(p==NULL)
{
cout<<"查着的值不存在"<<endl;
}
else cout<<"你查找的值在二叉排序树里"<<endl;
cout<<endl
while(Bisorttree.getroot()!=NULL)
{
cout<<"输入你要删除的值"<<endl;
cin>>k;
Bisortree.DelNode( k);
cout<<"是否要继续删除"<<endl;
cin>>ch;
cout<<"Y|N"<<endl;
{
if(ch!='Y')
break;
}
}
cout<<"中序遍历输出删除后的值"<<endl;
midle(Bisorttree.getroot());
cout<<endl
<<endl;
while(1)
{
cout<<"亲输入你要插入的值"<<endl;
cin>>k;
Bisortree.insertNode(k);
cout<<"亲是否要继续插入(N||Y)")
if(ch!='Y')
break;
}
cout<<"输出插入数值后的中序遍历"<<endl;
midle(Bisorttree.getroot());
cout<<"啊哈哈任务终于完成了"<<endl;
cin.get();
}
[解决办法]
treenode* Bitree::searchparent(treenode *B,int k);
把分号去掉