| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 782 人关注过本帖
标题:请教:二叉树的非递归遍历
只看楼主 加入收藏
yyarch
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:2 
请教:二叉树的非递归遍历

我编了一个二叉树的非递归遍历的程序,最后结果总是出问题,请大家帮忙看看。谢!

struct bitree
{
char data;
struct bitree *lchild,*rchild;
};

struct stack
{
int i;
struct bitree *treenode;
struct stack *next;
};

push(head,binode)
struct stack *head;
struct bitree *binode;
{
struct stack *p,*q;
q=head;
while( q->next )
q=q->next;
p=(struct stack *)malloc(sizeof(struct stack));
p->next=0;
q->next=p;
p->treenode->data=binode->data;
p->treenode->lchild=binode->lchild;
p->treenode->rchild=binode->rchild;
}

struct stack *pop(head)
struct stack *head;
{
struct stack *p,*q;
if( head->next==0 )
{
printf("ERROR");
exit(0);
}
p=head;
q=head->next;

while( q->next )
{
p=q;
q=q->next;
}

p->next=0;
return q;
}

struct bitree *createbitree() /* 递归建立二叉树 */
{
struct bitree *t;
char ch;
scanf("%c",&ch);
if( ch!='#' )
{
if( ch=='0' )
t=0;
else
{
t=(struct bitree *)malloc(sizeof(struct bitree));
if( t==0 )
exit(0);
t->data=ch;
t->lchild=createbitree();
t->rchild=createbitree();
}
}
return t;
}

traverse1(t) /* 前序递归遍历 */
struct bitree *t;
{
if(t)
{
printf("%c ",t->data);
traverse1(t->lchild);
traverse1(t->rchild);
}
}

traverse2(t) /* 中序递归遍历 */
struct bitree *t;
{
if(t)
{
traverse2(t->lchild);
printf("%c ",t->data);
traverse2(t->rchild);
}
}

traverse3(t) /* 后序递归遍历 */
struct bitree *t;
{
if(t)
{
traverse3(t->lchild);
traverse3(t->rchild);
printf("%c ",t->data);
}
}

freenode(t)
struct bitree *t;
{
if(t)
{
freenode(t->lchild);
freenode(t->rchild);
free(t);
}
}

main()
{
struct bitree *t,*q;
struct stack *head,*p;

head=(struct stack *)malloc(sizeof(struct stack));
head->next=0;

printf("Please input:");

t=createbitree();

printf("\n****di gui\n");

traverse1(t);
printf("\n");
traverse2(t);
printf("\n");
traverse3(t);

printf("\n\n****fei di gui\n");

push(head,t);
while( head->next )
{
p=pop(head);
printf("%c ",p->treenode->data);
q=p->treenode->rchild;
if( q )
push(head,q);
q=p->treenode->lchild;
if( q )
push(head,q);
free(p);
}

free(head);
freenode(t);
}

搜索更多相关主题的帖子: 二叉树 非递归 遍历 struct stack 
2006-06-13 14:29
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

写注释.可读性太差!

函数头全部重写

如:struct btnode *create(struct btnode *btree,int a)


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-06-13 19:20
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 
才刚接触二叉树,所以帮不上忙~不过帮顶了~

很高兴能和大家一起学习程序! QQ:114109098
2006-06-13 19:22
快速回复:请教:二叉树的非递归遍历
数据加载中...
 
   



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

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