回 帖 发 新 帖 刷新版面

主题:树的问题


这是我写的代码,但是不知道那里出错了,我找了好久,还是没有找到。望各位高手指点一下。谢谢了....

[code=c]
#include <iostream.h>
 struct node
 {
   int data;
   node *lchild,*rchild; 
 };
 
 void CreateBiTree()

{        node *root;

     for(int i=0;i<8;i++)
     {
    switch(i)
     {
     case 0: 
         root=new node ;
         root->data=1; 
         root->lchild=NULL;
         root->rchild=NULL;
     case 1:
                     root->lchild=new node ;
        root->lchild->data=2; 
                     root->lchild->lchild=NULL;
                      root->lchild->rchild=NULL;
     case 2:
         root->rchild=new node;
         root->rchild->data=3; 
         root->rchild->lchild=NULL;
         root->rchild->rchild=NULL;

     case 3:
         root->lchild->lchild=new node;
         root->lchild->lchild->data=4;
         root->lchild->lchild->lchild=NULL;
         root->lchild->lchild->rchild=NULL;
     case 4:
         root->lchild->rchild=new node;
         root->lchild->rchild->data=5; 
         root->lchild->rchild->lchild=NULL;
         root->lchild->rchild->rchild=NULL;
     case 5:
         root->rchild->lchild->data=6; 
         root->rchild->lchild->lchild=NULL;
         root->rchild->lchild->rchild=NULL;
     case 6:
         root->lchild->rchild->lchild=new node;
         root->lchild->rchild->lchild->data=7; 
         root->lchild->rchild->lchild->lchild=NULL;
         root->lchild->rchild->lchild->rchild=NULL;
     case 7:
         root->lchild->rchild->rchild=new node;
         root->lchild->rchild->rchild->data=8;
         root->lchild->rchild->rchild->lchild=NULL;
         root->lchild->rchild->rchild->rchild=NULL;
     }
 }
 }

void main()
{  


     CreateBiTree();
     
}
[/code]

回复列表 (共4个回复)

沙发

没仔细看,把 for(int i=0;i<8;i++) 这一行删除掉估计就行了

板凳

删了还是不行啊,麻烦能不能详细讲一下呢?谢谢....

3 楼


说实话,楼主您的这段代码写得太混乱了。很简单的代码怎么写得这么复杂。
我不知道那个for循环式用来做什么的,还有switch的每个case分支都没有break语句,不知道式有意这样还是掉了break语句。
对于为什么会出现段错误,原因很显然:
[code=c]
case 2:
         root->rchild=new node;
         root->rchild->data=3; 
         [color=FF0000]root->rchild->lchild=NULL;[/color]
         root->rchild->rchild=NULL;
[/code][code=c]
case 5:
         root->rchild->lchild->data=6; 
         [color=FF0000]root->rchild->lchild->lchild=NULL;[/color]
         root->rchild->lchild->rchild=NULL;
[/code]

上面红色部分,root->rchild->lchild在case 2中是NULL指针,而case 5中却访问了它的对象的lchild成员,并且这之间也没给它分配空间,这肯定会出问题了。

4 楼

switch语句的每个case,要写break来结束,否则会一直往下执行。
楼主在各个case里面加入一些printf语句,看看程序执行的顺序吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册