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语句前面就卡住,求大神帮助。。。
展开
 我来答
百度网友fc027fc
2015-01-04 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3160
采纳率:83%
帮助的人:767万
展开全部

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;
}

运行结果:

ring_year
2015-01-04 · TA获得超过1425个赞
知道小有建树答主
回答量:632
采纳率:80%
帮助的人:535万
展开全部
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());

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式