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

两处异常,没运行出来这个二叉树

2012-03-15 
两处错误,没运行出来这个二叉树。#include iostream.h #definenull0structtree{intdatastructtree*l,*r

两处错误,没运行出来这个二叉树。
#include "iostream.h "
#define   null   0

struct   tree{
      int   data;
      struct   tree   *l,*r;
};
void   newnode(int   value);
void   insert(struct   tree   *&root,struct   tree   *node);
void   Delete(struct   tree   *node);
void   display(struct   tree   *node);
tree   *proot;


void   main()
{
        proot=null;
newnode(8);
newnode(3);
newnode(6);
newnode(1);
newnode(5);
newnode(2);
newnode(9);
newnode(7);
newnode(4);
newnode(0);

      display(proot);
    Delete(proot);
}


void   newnode(int   value)
{
        struct   tree   *pnode=new(struct   tree);
pnode-> data=value;
pnode-> l=null;
pnode-> r=null;
insert(proot,pnode);
}


void   insert(struct   tree   *&root,struct   tree   *node)
{
        if(root==null)
{
        root=node;
return;
}
else
{
       
if(root-> data> =node-> data)
insert(root-> l,node);
else
insert(root-> r,node);
}
}


void   Delete(struct   tree   *&node)
{
        if(node-> l!=null)
{
Delete(node-> l);
}
if(node-> r!=null)
{
        Delete(node-> r);
}
delete(node);
}


void   display(struct   tree   *node)
{
        if(node-> l!=null)
display(node-> l);
cout < <node-> data < < '   ';
if(node-> r!=null)
display(node-> r);
}

[解决办法]
看你的函数声明和定义,*&没匹配
编译通过后运行也有问题,楼主再看看代码吧

那个struct用node命名吧,一棵树本来就是节点间通过指针组成的,结构的单位是叶子,用node命名更好,有了一个node,就知道整颗tree了
[解决办法]
void Delete(struct tree *&node);
[解决办法]
建议LZ还是采用believefym的建议吧,比较容易理解,要不人家还以为你是在整棵tree的插入删除呢。
Delete函数声明与实现不一致;下面实现应该是*&
delete函数中,delete后的指针应附值为NULL,避免野指针的引用。
如下:
#include <iostream>
using namespace std;

struct node{
int data;
struct node *l;
struct node *r;
};

void newnode(int value);
void insert(struct node *&root,struct node *node);
void Delete(struct node *&node);
void display(struct node *node);
node *proot;


void main()
{
proot=NULL;
newnode(8);
newnode(3);
newnode(6);
newnode(1);
newnode(5);
newnode(2);
newnode(9);
newnode(7);
newnode(4);
newnode(0);

display(proot);
printf( "\n ");
Delete(proot);
if ( NULL == proot )
{
printf( "NULL\n ");
}
else
display(proot);
}


void newnode(int value)
{
struct node *pnode=new(struct node);
pnode-> data=value;
pnode-> l=NULL;
pnode-> r=NULL;
insert(proot,pnode);


}


void insert(struct node *&root,struct node *node)
{
if(root == NULL)
{
root=node;
return;
}
else
{

if(root-> data > = node-> data)
insert(root-> l,node);
else
insert(root-> r,node);
}
}


void Delete(struct node *&node)
{
if (NULL == node)
{
return;
}
if(node-> l != NULL)
{
Delete(node-> l);
}
if(node-> r != NULL)
{
Delete(node-> r);
}
printf( "Deleted data: %d\n ", node-> data);
delete(node);
node = NULL;
}


void display(struct node *node)
{
if (NULL == node)
{
return;
}
if(node-> l != NULL)
display(node-> l);
cout < <node-> data < < ' ';
if(node-> r != NULL)
display(node-> r);
}


热点排行