二叉树后序遍历算法
来源:互联网 发布:阿里云域名备案 编辑:程序博客网 时间:2024/06/13 20:24
二叉树后序遍历算法
#include <iostream>
//#include <climits>
using namespace std;
#define MAXNUM 50
typedef int Elemtype;
typedef struct BiTNode
{
Elemtype data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
typedef struct
{
BiTree bt;
int tag; // 标签
}Elem;
typedef struct sqStack // 栈
{
Elem s_elem[MAXNUM];
int top;
}sqStack;
void InitStack(sqStack &s) // 初始化栈
{
s.top=-1;
}
bool IsEmpty(sqStack s) // 判断栈是否为空
{
if (s.top==-1)
return true;
else
return false;
}
bool Push(sqStack &s,Elem e) // 进栈
{
if ((s.top+1)==MAXNUM) // 栈满
return false;
s.s_elem[++s.top]=e;
return true;
}
bool Pop(sqStack &s,Elem &e) // 出栈
{
if (s.top==-1) // 栈满
return false;
e=s.s_elem[s.top--];
return true;
}
bool GetTop(sqStack s,Elem &e) // 获取栈顶元素
{
if (s.top==-1) // 栈满
return false;
e=s.s_elem[s.top];
return true;
}
void CreateBiTree(BiTree &T)
{
Elemtype data;
scanf("%d",&data);
if(data!=99)
{
T=new BiTNode;
T->data=data;
T->lchild=NULL;
T->rchild=NULL;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PostOrder(BiTree T) // 二叉树非递归后序遍历
{
sqStack s;
InitStack(s);
BiTNode *p=T; // 指向头结点
do
{
while (p)
{
Elem et;
et.bt=p;
et.tag=1;
Push(s,et);
p=p->lchild; // 将左孩子全部进栈
}
if (!IsEmpty(s))
{
Elem ee;
Pop(s,ee);
if (ee.tag==1){
ee.tag=2;
p=ee.bt->rchild;
Push(s,ee);
}
else{
cout<<ee.bt->data<<" ";
}
}
} while (!IsEmpty(s));
}
- 二叉树后序遍历算法
- 二叉树后序遍历(递归算法)
- 算法求二叉树后序遍历
- 二叉树后序遍历的非递归算法
- 二叉树后序遍历非递归算法
- 二叉树后序遍历(非递归算法)
- 二叉树后序遍历非递归算法
- 二叉树后序遍历的非递归算法
- 二叉树后序遍历的非递归算法
- 二叉树层序遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- iOS开发 CoreMotion 获取当前运动状态 步行/跑步/自行车/驾车 CMMotionActivityManager
- Android:使用MuPdf开源库阅读PDF文件
- TCP/IP——TCP协议中提高网络利用率的机制
- UVALIVE 4452(2-SAT变形)
- Android插件化开发笔记(一)
- 二叉树后序遍历算法
- 二分法查找基础
- MAC OS下OpenSSL生成私钥和公钥以及RSA加密
- U3D 游戏引擎之游戏架构脚本该如何来写
- 数据结构(1)队列(C语言版)
- [Express-02] 路由配置
- python爬虫代码简化1
- Trie(字典树)的学习
- MD5的简单学习,钥匙串