二叉树先序,中序,后序遍历非递归实现
2016-11-05 22:49
495 查看
#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"); }
相关文章推荐
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- 利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树前序、中序、后序遍历的递归与非递归算法实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树的前序、中序、后序遍历 递归非递归实现
- ZT 二叉树先序,中序,后序遍历非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 用非递归实现二叉树的前序、中序、后序、层次遍历,用递归实现查找、统计个数、比较、求深度
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- [转]非递归实现二叉树的前序,中序,后序遍历
- 二叉树先序、中序、后序遍历的非递归实现,纯c代码
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现