普通树的非递归遍历
来源:互联网 发布:java 哪里用到反射 编辑:程序博客网 时间:2024/05/16 05:10
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define M 3#define MAX 300FILE*rf;void open(){ rf=fopen("tree.txt","r");}void off(){ fclose(rf);}void in(char *ch){ fscanf(rf,"%c",ch);}//以上为了输入方便,定义从文件输入一棵树typedef struct node{ char data; struct node*child[M];}tnode,*tree;tree creat()//递归先序创建一棵树{ char ch;tree t; in(&ch); if(ch=='#')t=NULL; else { t=(tnode*)malloc(sizeof(tnode)); t->data=ch; int i; for(i=0;i<M;i++) t->child[i]=creat(); } return t;}void StackPreorder(tree t)//非递归前序遍历树{ tree stack[MAX]; int istack[MAX];//保存当前栈顶树访问到了那一颗子树 int top=0; while(top||t) { if(t) { printf("%c ",t->data); stack[top]=t;//该树入栈,保存 istack[top++]=1;//记录下一次应该是访问到第2棵树 t=t->child[0];//先访问第一棵子树 } else if(istack[top-1]<M)//访问它的下一个兄弟 t=stack[top-1]->child[istack[top-1]++]; else --top;//退栈 }}void StackPostorder(tree t)//非递归后序遍历树{ tree stack[MAX]; int istack[MAX],top=0; while(top||t) { if(t) { stack[top]=t; istack[top++]=1; t=t->child[0]; } else if(istack[top-1]<M)//继续下一个兄弟 t=stack[top-1]->child[istack[top-1]++]; else { printf("%c ",stack[--top]->data);//出栈 t=NULL;//访问置空 } }}void LevelOrder(tree t){ tree queue[MAX]; int front=0,rear=0,i; if(t)queue[rear++]=t; while(front<rear) { t=queue[front++];//输出队首信息,出队 printf("%c ",t->data); for(i=0;i<M;i++) if(t->child[i])//如果子树存在,入队 queue[rear++]=t->child[i]; }}int Equal(tree a,tree b){ if(!a&&!b)//都为空,则相等 return 1; if(a&&b) { if(a->data!=b->data)return 0;//数据不同,则树不同 int i; for(i=0;i<M;i++)//只要有一颗子树不同,则不同 if(!Equal(a->child[i],b->child[i])) return 0; return 1;//子树全同,相同 } return 0;//其他不同}int main(){ open(); //ABD#####C###E##F#GH###I##### tree t=creat(); LevelOrder(t); printf("\n"); StackPreorder(t); off();}
0 0
- 普通树的非递归遍历
- BST(或者普通树)的中序遍历非递归版本
- 树的非递归遍历
- 树的非递归遍历
- 树的非递归遍历
- 树的遍历 非递归
- 树的非递归遍历
- 树的非递归遍历
- 树的非递归遍历
- 树的非递归遍历
- 树的非递归遍历
- 树的非递归遍历
- 树的非递归遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 树的建立 递归非递归遍历
- 递归非递归实现树的遍历
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 做一名优秀的管理者,否则你可能将沦为一名谋杀者。
- vim保存没有权限修改的文件
- Java NIO使用及原理分析(一)
- HDU ACM 1281 棋盘游戏->二分图最大匹配(匈牙利算法实践)
- 【最短路】 ZOJ 3877 Earthstone Keeper
- 普通树的非递归遍历
- 春漫湖㳇 带我回家
- 英语——突破的一步
- Program work 13. Heap Sort in Java
- Java NIO使用及原理分析(二)
- B\S备忘录13——终于有时间看看MVC了R2
- 广播接收者 -- BroadcastReceiver
- HashMap时间复杂度问题
- 在JSP页面更改数据库信息后点击确定成功后怎么刷新