转:先序中序后序遍历二叉树
来源:互联网 发布:win8连接网络打印机 编辑:程序博客网 时间:2024/06/14 21:39
利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- #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");
- }
- 转:先序中序后序遍历二叉树
- 二叉树的先序中序后序遍历
- 二叉树遍历(转)
- 二叉树的遍历(转)
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 二叉树的建立与先序中序后序遍历
- 非递归先序中序后序遍历二叉树
- 二叉树的先序中序后序遍历问题
- 二叉树 遍历 算法总结(转)
- 非递归遍历二叉树(转)
- [转]二叉树的建立和遍历
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- Java I/O流-ObjectInputStream、ObjectOutputStream
- rpmbuild制作rpm包
- 【每周一译】如何贡献开源代码
- Android声音资源的使用
- ios项目应用图标icon和default图片命名规则
- 转:先序中序后序遍历二叉树
- Common BeanUtils使用
- hdu1171 Big Event in HDU (多重背包)
- 玩于鼓掌之中的小老虎机——Tiny Tiger Machine
- linux 下 使用有空格的文件
- 从一道C语言数组指针的笔试题看面试者的能力和心态
- 【找回Win8系统不见的附件目录&小工具】
- Apache Thrift原理及windows使用
- android项目关联android library project失败问题