| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2857 人关注过本帖
标题:[求助]二叉树遍历的程序里面的visit函数如何实现
只看楼主 加入收藏
killvawow
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-10-30
收藏
 问题点数:0 回复次数:4 
[求助]二叉树遍历的程序里面的visit函数如何实现

我在没懂的后面加注释 希望大家指教

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct binode
{
char data;
struct binode *lchild;
struct binode *rchild;
}Binode;

Binode* create()
{
char ch;
Binode *t;
scanf("%c",&ch);
if(ch=='\n ')
{
t=(Binode *)malloc(sizeof(Binode));
t->data=ch;
t->lchild=create();
t->rchild=create();
}
return t;
}

char putcharacter(char ch) //问题1:这个地方是用来输入数据的吧,是怎么做到的?
{
return(putchar(ch));
}d

void Preorder(Binode * t,char(* visit)(char ch)) //问题二:这个定义我一点也没有明白,visit根本没有
定义这个函数,怎么就直接用了?它是怎么实现的。
后面的(char ch)是什么意思?
//问题3:如何+一个程序,实现求二叉树的高度
{
void PrintElement(char e)
{
printf("%c",e);
return;
}
if(t){
visit(t->data);
Preorder(t->lchild,visit);
Preorder(t->rchild,visit);
}
}
void Inorder(Binode *t,char(* visit)(char ch))
{
if(t){
Inorder(t->lchild,visit);
visit(t->data);
Inorder(t->rchild,visit);
}
}

void Postorder(Binode *t,char(* visit)(char ch))
{
if(t){
Postorder(t->lchild,visit);
Postorder(t->rchild,visit);
visit(t->data);
}
}

main()
{
char ch;
Binode *t=0;
Binode *create();
char putcharacter(char ch);
void Preorder(Binode * t,char(* visit)(char ch));
void Inorder(Binode *t,char(* visit)(char ch));
void Postorder(Binode *t,char(* visit)(char ch));

printf("\nto create bintree...\n\n");
t=create();
printf("Preorder visit bintree:\n");
Preorder(t,putcharacter);
printf("\n");
printf("Inorder visit bintree:\n");
Inorder(t,putcharacter);
printf("\n");
printf("Postorder visit bintree:\n");
Postorder(t,putcharacter);

}

搜索更多相关主题的帖子: 二叉树 遍历 visit 函数 
2006-10-30 13:12
killvawow
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-10-30
收藏
得分:0 
帮帮我啊~~~~~
2006-10-30 15:53
pyc21
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-6-16
收藏
得分:0 

create ()函数采用了递归的算法:先解决了整个树的最左孩子,递归解决每个节点的右孩子,深度由大到小,最后将树根的右孩子添上。
char putcharacter(char ch) //问题1:这个地方是用来输入数据的吧,是怎么做到的?
{
return(putchar(ch));
}d
是用来输入数据的,最终是在函数void Preorder(Binode * t,char(* visit)(char ch))中的visit()调用的(visit()是一个可以指向函数的指针)。


2006-11-01 15:42
pyc21
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-6-16
收藏
得分:0 
void Preorder(Binode * t,char(* visit)(char ch)) 此函数中的
void PrintElement(char e)
{
printf("%c",e);
return;
}
函数是多余的

2006-11-01 15:45
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
以下是引用killvawow在2006-10-30 13:12:41的发言:

void Preorder(Binode * t,char(* visit)(char ch)) //通用形式,如下面的对应着指向putcharacter函数
...
Preorder(t,putcharacter);
...

int Depth(BTree t) //求二叉树的深度
{
int h,lh,rh;
if(t==NULL)
h=0;
else
{
lh = Depth(t->Lchild);
rh = Depth(t->Rchild);
(lh >= rh)?(h = lh+1):(h = rh+1);
}
return(h);
}


Do people want thick road ...
2006-11-01 21:12
快速回复:[求助]二叉树遍历的程序里面的visit函数如何实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096204 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved