二叉树先序,中序,后序遍历非递归实现
2012-04-28 14:30
543 查看
利用栈实现二叉树的先序,中序,后序遍历的非递归操作
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <queue> #include <stack> #include <iostream> using namespace std; typedef struct BiTNode{ char data; BiTNode *lchild, *rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &T)//建树,按先序顺序输入节点 { char ch; scanf("%c",&ch); if(ch==' ') { T=NULL; return; } else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T) exit(1); T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } void InOrderTraverse(BiTree T)//非递归中序遍历 { stack<BiTree> Stack; if(!T) { printf("空树!\n"); return; } while(T || !Stack.empty()) { while(T) { Stack.push(T); T=T->lchild; } T=Stack.top(); Stack.pop(); printf("%c",T->data); T=T->rchild; } } void PreOrderTraverse(BiTree T)//非递归先序遍历 { stack<BiTree> Stack; if(!T) { printf("空树!\n"); return; } while(T || !Stack.empty()) { while(T) { Stack.push(T); printf("%c",T->data); T=T->lchild; } T=Stack.top(); Stack.pop(); T=T->rchild; } } void PostOrderTraverse(BiTree T)//非递归后序遍历,用一个标记标记右子树是否访问过 { int flag[20]; stack<BiTree> Stack; if(!T) { printf("空树!\n"); return; } while(T) { Stack.push(T); flag[Stack.size()]=0; T=T->lchild; } while(!Stack.empty()) { T=Stack.top(); while(T->rchild && flag[Stack.size()]==0) { flag[Stack.size()]=1; T=T->rchild; while(T) { Stack.push(T); flag[Stack.size()]=0; T=T->lchild; } } T=Stack.top(); printf("%c",T->data); Stack.pop(); } } void main() { BiTree T; CreateBiTree(T); PreOrderTraverse(T); printf("\n"); InOrderTraverse(T); printf("\n"); PostOrderTraverse(T); printf("\n"); }
相关文章推荐
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)
- 用递归和非递归方式实现二叉树先序、中序和后序遍历
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- Java实现二叉树的前序、中序、后序遍历(递归方法)
- 二叉树的先序、中序、后序遍历的非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序、中序,后序遍历的非递归实现
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- PHP实现非递归先序、中序、后序遍历二叉树
- 从递归的异同分析二叉树先序、中序、后序遍历共同流程并实现非递归方式的三种遍历。
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)