ZT 二叉树先序,中序,后序遍历非递归实现
2014-02-06 15:01
295 查看
二叉树先序,中序,后序遍历非递归实现
分类: 数据结构及算法2012-04-28 14:30 8572人阅读 评论(6) 收藏 举报structc
利用栈实现二叉树的先序,中序,后序遍历的非递归操作
[cpp] view plaincopy
#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实现二叉树的前序、中序、后序遍历(递归方法)
- 数据结构 —— 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 从递归的异同分析二叉树先序、中序、后序遍历共同流程并实现非递归方式的三种遍历。
- 二叉树前序、中序、后序遍历的递归与非递归算法实现
- 二叉树的前序、中序、后序遍历 递归非递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- C语言递归实现二叉树的先序、中序、后序遍历
- PHP实现非递归先序、中序、后序遍历二叉树
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- leetcode笔试题二叉树的前序、中序、后序遍历的递归和循环c++实现