二叉树先序,中序,后序遍历非递归实现
来源:互联网 发布:淘宝拍卖手表有假货吗 编辑:程序博客网 时间:2024/05/17 23:49
利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- #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");
- }
From:http://blog.csdn.net/cxllyg/article/details/7520037
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- Java实现-二叉树先序,中序,后序遍历及递归,非递归遍历
- 二叉树先序遍历,中序遍历和后序遍历的非递归实现
- 二叉树非递归前、中、后序遍历实现
- 二叉树先序,中序,后序、层序遍历递归和非递归实现
- 数据结构 分别用递归和非递归方法实现二叉树先序,中序,后序遍历
- 用递归和非递归方式实现二叉树先序、中序和后序遍历
- 二叉树先序,中序,后序的非递归遍历
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树
- 二叉树先序遍历,中序遍历,后序遍历递归非递归方法
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- 二叉树前序遍历、中序遍历、后序遍历的非递归实现
- 每日一算法:打印一个菱形
- String 转 Json,应用jar包com.google.gson
- Python自学1:Python 基本数据结构:列表、元组、字典
- Android高手进阶教程(十)之----Android PopupWindow的使用!
- QtCreator源码分析—4.核心插件
- 二叉树先序,中序,后序遍历非递归实现
- 多种设计模式文章(备忘,有空多阅读)
- 算法习题63:字符串删除特定字符
- 数组中随机选择n个数
- 经典Peterson算法解决互斥锁的并发的Java实现
- NYOJ 325zb的生日
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!
- Linux/Unix下去除windows下换行符^M
- json-c-0.9 在linux上编译使用