二叉树的先序,中序,后序遍历的非递归算法
来源:互联网 发布:mysql数据库设计案例 编辑:程序博客网 时间:2024/04/30 14:40
关键是栈的运用,以此来模拟递归的过程
1.先序遍历非递归算法#define maxsize 100typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void PreOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { while (p!=null) //遍历左子树 { visite(p->data); push(s,p); p=p->lchild; }//endwhile if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历 { p=pop(s); p=p->rchild; }//endif }//endwhile }//PreOrderUnrec2.中序遍历非递归算法#define maxsize 100typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void InOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { while (p!=null) //遍历左子树 { push(s,p); p=p->lchild; }//endwhile if (!StackEmpty(s)) { p=pop(s); visite(p->data); //访问根结点 p=p->rchild; //通过下一次循环实现右子树遍历 }//endif }//endwhile}//InOrderUnrec3.后序遍历非递归算法#define maxsize 100typedef enum{L,R} tagtype;typedef struct{ Bitree ptr; tagtype tag;}stacknode;typedef struct{ stacknode Elem[maxsize]; int top;}SqStack;void PostOrderUnrec(Bitree t){ SqStack s; stacknode x; StackInit(s); p=t; do { while (p!=null) //遍历左子树 { x.ptr = p; x.tag = L; //标记为左子树 push(s,x); p=p->lchild; } while (!StackEmpty(s) && s.Elem[s.top].tag==R) { x = pop(s); p = x.ptr; visite(p->data); //tag为R,表示右子树访问完毕,故访问根结点 } if (!StackEmpty(s)) { s.Elem[s.top].tag =R; //遍历右子树 p=s.Elem[s.top].ptr->rchild; } }while (!StackEmpty(s));}//PostOrderUnrec
层次遍历
int levelorder_traverse(bitree bt, int (*visit)(elemtype e)){sqqueuesq;bitreecur;init_queue(&sq);if (bt) {in_queue(&sq, bt);while (!is_queue_empty(sq)) {out_queue(&sq, &cur);visit(cur->data);if (cur->lchild)in_queue(&sq, cur->lchild);if (cur->rchild)in_queue(&sq, cur->rchild);}}return OK;}
- 二叉树的先序,中序,后序遍历的非递归算法
- 二叉树的先序,中序和后序遍历的非递归算法
- 二叉树的先序,中序,后序遍历的非递归算法
- 二叉树遍历的非递归算法(先序、中序、后序)代码实现
- 建立二叉树,实现二叉树的先序遍历、中序和后序遍历的非递归算法
- 二叉树的先序、中序、后序递归遍历和非递归遍历
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
- 二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)
- 二叉树的后序,先序,中序遍历的非递归遍历
- 二叉树的先序、中序、后序、层序递归及非递归遍历
- 二叉树的先序/中序/后序(递归、非递归)+层序遍历
- 二叉树的遍历 中序 后序 先序 递归 非递归
- 二叉树的创建和先序,中序,后序,递归,非递归遍历
- 二叉树的遍历 先序 中序 后序 递归非递归
- 二叉树的先序、中序、后序遍历(递归 and 非递归)
- 二叉树的先序遍历(非递归算法)
- 二叉树的先序遍历(非递归算法)
- myeclipse配置tomcat
- java中常见的关于String的题目
- 2014迅雷校园招聘笔试题答案
- NoSQL代表: Mongo DB(芒果数据库)
- Linux下安装Erlang
- 二叉树的先序,中序,后序遍历的非递归算法
- [Linux/Unix C 编程] perror函数,strerror函数,errno
- Android桌面组件开发之实时文件夹(Live_Folders)
- iOS 获取本机可以存放文件的路径
- Java过滤器实现原理
- 0910
- 三、Mongo中的CRUD
- 正则表达式30分钟入门教程
- c类型自动转换