| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1516 人关注过本帖
标题:二叉树后序遍历非递归算法
只看楼主 加入收藏
sjbird331
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2005-8-5
收藏
 问题点数:0 回复次数:1 
二叉树后序遍历非递归算法
请问哪位高人有后序遍历二叉树的非递归算法?谢谢
搜索更多相关主题的帖子: 二叉树 遍历 递归 算法 
2006-02-22 10:31
stnlcd
Rank: 1
等 级:新手上路
帖 子:177
专家分:1
注 册:2004-11-21
收藏
得分:0 

[CODE]
/*以下程序在TC2.0编译!*/
/*程序默认的先序建树序列为:“abdg e c f ”*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char tree[30]; /*tree数组为先序建树序列*/
int ti=0;

typedef struct BiTNode {
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

/*先序建树函数!*/
void CreateBiTree(BiTree *T) {
char ch;
ch=tree[ti++];
if(ch==NULL) return;
if(ch==' ') *T=NULL;
else {
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}

/*二叉树的后序遍历递归算法*/
void PostOrder(BiTree T) {
if(T) {
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ",T->data);
}
}

/*采用”标记栈法“的后序遍历非递归算法(while-while形式)*/
void PostOrder_zb(BiTree t) {
int tag[100],top=0; /*tag为标记栈*/
BiTree stack[100];
while(t||top) {
while(t) {
stack[++top]=t;
tag[top]=0; /*标记栈置为0:第一次访问*/
t=t->lchild;
}
if(top) {
if(tag[top]==1) {printf("%c ",stack[top]->data); --top;} /*如果这个结点访问了两次,输出之*/
else {
t=stack[top]; /*否则置栈顶为:第二次访问*/
tag[top]=1;
t=t->rchild;
}
}
}
}

/*采用”标记栈法“的后序遍历非递归算法(while-if形式)*/
void PostOrder_zb_if(BiTree t) {
int tag[100],top=0; /*tag为标记栈*/
BiTree stack[100];
while(t||top) {
if(t) {
stack[++top]=t;
tag[top]=0; /*标记栈置为0:第一次访问*/
t=t->lchild;
}
else {
if(tag[top]==1) {printf("%c ",stack[top]->data); --top;} /*如果这个结点访问了两次,输出之*/
else {
t=stack[top]; /*否则置栈顶为:第二次访问*/
tag[top]=1;
t=t->rchild;
}
}
}
}

main() {
BiTree T=NULL;
strcpy(tree,"abdg e c f ");/*该树的先序序列为:abdgecf*/
CreateBiTree(&T);
printf("\nPostOrder output:");
PostOrder(T);
printf("\nPostOrder_zb output:");
PostOrder_zb(T);
printf("\nPostOrder_zb_if output:");
PostOrder_zb_if(T);
getch();
}

[/CODE]


要让一个男人破产,请给他一架相机,要让一个男人倾家荡产,请给他一架望远镜。
2006-02-28 20:20
快速回复:二叉树后序遍历非递归算法
数据加载中...
 
   



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

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