两处错误,没运行出来这个二叉树。
#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);
}