本帖最后由 风之残月 于 2014-11-9 22:01 编辑
这里的visit函数为什么能直接显示左孩子和右孩子的int值,这里没有用t->l->n表示,难道这样默认也行?void visit (int e)
{ printf("%d ",e);
}
void bianli(tree *t,void(*visit)(int)) //函数定义调用函数 需将类型报出,然后用指针*调用
{
if(t!=NULL)
{
printf("%d ",t->n);
bianli(t->l,visit); //left左孩子
bianli(t->r,visit); //right右孩子
下面是全部代码#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct tree
{
int n;
struct tree *l ,*r,*p; //l 表示左孩子 r 表示右孩子 p表示父亲
}tree;
tree *gen()
{
tree *t;
t=(tree *)malloc(sizeof(tree));
t->p=NULL;
t->l=NULL;
t->r=NULL;
t->n=1;
return t;
}
void visit (int e)
{ printf("%d ",e);
}
void bianli(tree *t,void(*visit)(int)) //函数定义调用函数 需将类型报出,然后用指针*调用
{
if(t!=NULL)
{
printf("%d ",t->n);
bianli(t->l,visit);
bianli(t->r,visit);
}
}
void main()
{
tree *t,*a1,*a2,*a3,*a4;
t=gen();
a1=(tree *)malloc(sizeof(tree)); //建立根节点的左右孩子
t->l=a1; //t指向左孩子
a1->p=t; //a1指向父亲
a1->n=2;
a1->l=NULL;
a1->r=NULL;
a2=(tree *)malloc(sizeof(tree)); //建立根节点的左右孩子
t->r=a2; //t指向右孩子
a2->p=t; //a2指向父亲
a2->n=3;
a2->l=NULL;
a2->r=NULL;
a3=(tree *)malloc(sizeof(tree)); //建立根节点的左右孩子
a1->l=a3; //a1指向左孩子
a3->p=a1; //a3指向父亲
a3->n=4;
a3->l=NULL;
a3->r=NULL;
a4=(tree *)malloc(sizeof(tree)); //建立根节点的左右孩子
a1->r=a4; //a1指向右孩子
a4->p=a1; //a4指向父亲
a4->n=5;
a4->l=NULL;
a4->r=NULL;
bianli(t,visit);
}
|