c++二叉树编程,错误求解!!
#include<iostream>usingnamespacestd;intb=0,c=0;classbinode{public:inta;binode*lchild;...
#include<iostream>
using namespace std;
int b=0,c=0;
class binode{public:
int a;
binode*lchild;
binode*rchlid;
};
class bitree{
private:
binode *tree;
public:
void insertbitree(binode*);//输入二叉树元素
void prebitree(binode*);//先序遍历二叉树
binode*apple();
};
void bitree::insertbitree(binode*p)//输入二叉树元素
{
cin>>b;
if(b==-1)
{p=NULL;}
else
{ p=new binode[1];
p->a=b;
cout<<"输入左子树"<<endl;
insertbitree(p->lchild);
cout<<"输入右子树"<<endl;
insertbitree(p->rchlid);
}
}
void bitree::prebitree(binode*p)//先序遍历二叉树
{
if(p)
{
cout<<p->a<<"";
prebitree(p->lchild);
prebitree(p->rchlid);
}
}
binode*bitree::apple()
{
return tree;
}
void main()
{ int e;
bitree a;
cout<<"输入元素,-1为空:"<<endl;
a.insertbitree(a.apple());
cout<<"先序遍历二叉树是:"<<endl;
a.prebitree(a.apple());
}
程序稍简化就是上面这样了,一运行到先序遍历,cout语句前面就卡住,求大神帮助。。。 展开
using namespace std;
int b=0,c=0;
class binode{public:
int a;
binode*lchild;
binode*rchlid;
};
class bitree{
private:
binode *tree;
public:
void insertbitree(binode*);//输入二叉树元素
void prebitree(binode*);//先序遍历二叉树
binode*apple();
};
void bitree::insertbitree(binode*p)//输入二叉树元素
{
cin>>b;
if(b==-1)
{p=NULL;}
else
{ p=new binode[1];
p->a=b;
cout<<"输入左子树"<<endl;
insertbitree(p->lchild);
cout<<"输入右子树"<<endl;
insertbitree(p->rchlid);
}
}
void bitree::prebitree(binode*p)//先序遍历二叉树
{
if(p)
{
cout<<p->a<<"";
prebitree(p->lchild);
prebitree(p->rchlid);
}
}
binode*bitree::apple()
{
return tree;
}
void main()
{ int e;
bitree a;
cout<<"输入元素,-1为空:"<<endl;
a.insertbitree(a.apple());
cout<<"先序遍历二叉树是:"<<endl;
a.prebitree(a.apple());
}
程序稍简化就是上面这样了,一运行到先序遍历,cout语句前面就卡住,求大神帮助。。。 展开
3个回答
展开全部
insert的时候有问题,建议修改为:
#include<iostream>
using namespace std;
class binode{
public:
int a;
binode* lchild;
binode* rchild;
};
class bitree{
public:
binode* tree;
public:
binode* insertbitree(binode*);//输入二叉树元素
void prebitree(binode*);//先序遍历二叉树
binode* apple();
};
binode * bitree::insertbitree(binode *p)//输入二叉树元素
{
int b;
cin>>b;
if(b==-1){
return NULL;
}
else {
binode* bt = new binode;
(bt->a) = b;
p = bt;
cout<<"输入"<< b <<"的左子树"<<endl;
p->lchild = insertbitree(p->lchild);
cout<<"输入"<< b <<"的右子树"<<endl;
p->rchild = insertbitree(p->rchild);
return p;
}
}
void bitree::prebitree(binode*p)//先序遍历二叉树
{
if(p != NULL){
cout<<p->a<<" ";
prebitree(p->lchild);
prebitree(p->rchild);
}
return;
}
binode* bitree::apple(){
return tree;
}
int main()
{
bitree *p = new bitree;
cout<<"输入元素-1为空:"<<endl;
p->insertbitree(p->apple());
cout<<"先序遍历二叉树是:"<<endl;
p->prebitree(p->apple());
system("pause");
return 0;
}
运行结果:
展开全部
void bitree::insertbitree(binode *root, int x)
{
if(root == NULL)
{
binode *p = new binode;
p->lchild = NULL;
p->rchild = NULL;
p->a = x;
root = p;
}else{
if(root->a > x){
if(root->lchild == NULL){
binode *p = new binode;
p->lchild = NULL;
p->rchild = NULL;
p->a = x;
root->lchild = x;
}else{
insertbitree(root->lchild,x);
}
}
if( root->a < x){
if(root->rchild == NULL){
binode *p = new binode;
p->lchild = NULL;
p->rchild = NULL;
p->a = x;
root->rchild = x;
}else{
insertbitree(root->rchild,x);
}
}
}
楼主prebitree没错,是由于insert错误了,建立的根本不是一个正常的树,因此会造成问题,参考上面的代码再重写把。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-08-05
展开全部
1.prebitree() *tree没有分配空间,传递的是指针,没有返回值,根本不可能建树。
2.建节点 返回没有令=NULL,
1.传递指针的指针。
2.返回指针。
#include<iostream>
using namespace std;
int b = 0, c = 0;
class binode{
public:
int a;
binode*lchild;
binode*rchlid;
binode(){ lchild = 0; rchlid = 0; }//初始化
};
class bitree{
private:
binode* root;
public:
bitree();
void insertbitree(binode**);//输入二叉树元素
void prebitree(binode**);//先序遍历二叉树
//void ints(){ tree = this; }
binode**apple();
};
void bitree::insertbitree(binode**p)//输入二叉树元素
{
cin >> b;
if (b == -1)
{
p = NULL;
}
else
{
*p = new binode;
(*p)->a = b;
cout << "输入左子树" << endl;
insertbitree(&((*p)->lchild));
cout << "输入右子树" << endl;
insertbitree(&((*p)->rchlid));
}
}
void bitree::prebitree(binode**h)//先序遍历二叉树
{
binode *p = *h;
if (p)
{
cout << p->a << "";
prebitree(&p->lchild);
prebitree(&p->rchlid);
}
}
bitree::bitree()
{
//head=new binode;
}
binode**bitree::apple()
{
return &root;
}
void main()
{
// int e;
bitree b;
cout << "输入元素,-1为空:" << endl;
b.insertbitree(b.apple());
cout << "先序遍历二叉树是:" << endl;
b.prebitree(b.apple());
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询