首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

二叉排序树有关问题

2013-04-21 
二叉排序树问题我自己写了一个二叉排序树,调试了老半天还是有如下错误,谁能告诉我这是什么错误-----------

二叉排序树问题

我自己写了一个二叉排序树,调试了老半天还是有如下错误,谁能告诉我这是什么错误
--------------------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);
把分号去掉

热点排行