二叉树三种遍历的非递归算法(背诵版)本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法,直接用于答题。
2013-11-18 02:03
260 查看
1.先序遍历非递归算法
#define maxsize 100 typedef 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 100 typedef 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 100 typedef 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
相关文章推荐
- 二叉树三种遍历的非递归算法(背诵版)
- 二叉树先序、中序、后序三种遍历的非递归算法
- 二叉树前序、中序、后序三种遍历的非递归算法
- [转载]二叉树先序、中序、后序三种遍历的非递归算法
- 二叉树先序、中序、后序三种遍历的非递归算法
- 二叉树先序、中序、后序三种遍历的非递归算法
- 二叉树三种遍历的非递归算法(背诵版)
- 二叉树三种遍历的非递归算法(背诵版)
- 二叉树前序、中序、后序三种遍历的非递归算法
- 【课本】二叉树前序、中序、后序三种遍历的非递归算法
- (1)建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出对用二叉链表存储的二叉树进行层次遍历算法。 (4)求二叉树的所有叶子及结点总数。
- 有关二叉树的三种遍历方式------先序,中序,后序
- 二叉树三种遍历的非递归算法
- 【数据结构与算法】二叉树前序、中序、后序遍历间关系
- 二叉树三种遍历的非递归算法
- 【算法与数据结构】二叉树的 中序 遍历
- 用Java语言实现二叉树的三种遍历(先序、中序、后序遍历)
- 二叉树三种遍历的非递归算法
- [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现
- 二叉树先序、中序、后序遍历的递归算法和非递归算法