中序非递归遍历二叉树
来源:互联网 发布:淘宝客qq群推广技巧 编辑:程序博客网 时间:2024/06/10 20:48
二叉树的递归算法虽然简单,但是会导致时间复杂度比较高,下面给大家带来用栈实现的二叉树非递归算法
首先定义好二叉树,和元素类型为二叉树的栈
typedef struct BiTNode{ TElemType data; struct BiTNode *lchild, *rchild;}BiTNode,*BiTree;typedef BiTree SElemType;typedef struct{ SElemType *base; SElemType *top; int stacksize;}SqStack;
然后实现栈的方法
#include"1.h"#include<stdio.h>#include<stdlib.h>#include<malloc.h>using namespace std;//初始化栈Status InitStack(SqStack &s){ s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!s.base)exit(OVERFLOW); s.top=s.base; s.stacksize=STACK_INIT_SIZE; return OK;}//取栈顶元素Status GetTop(SqStack s,SElemType &e){ if(s.top=s.base) return ERROR; e=*(s.top-1); return OK;}//元素入栈Status Push(SqStack &s,SElemType e){ if(s.top-s.base>=s.stacksize){ s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!s.base)exit(OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT; } *s.top++ =e; return OK;}//取栈顶元素,并使top指针下移(也就是出栈)Status Pop(SqStack &s,SElemType &e){ if(s.top==s.base)return ERROR; e=*--s.top; return OK;}//判断栈是否Status StackEmpty(SqStack &s){ if(s.top==s.base)return TURE; else return FALSE;}
然后通过栈的操作遍历二叉树
Status InOrderTraverse(BiTree T){ SqStack sta; BiTree point; InitStack(sta);point=T; while(point||!StackEmpty(sta)){ if(point){Push(sta,point);point=point->lchild;} else{ Pop(sta,point);if(!Visit(point->data))return ERROR; point=point->rchild; } } return OK;}
这样方法就写好了,想再检验一下方法可以在主函数中调用
#include <iostream>#include"head2.h"using namespace std;int main() {BiTNode *BiTree; if(CreateBiTree(BiTree)) cout<<"建树成功"; else{ } cout<<"\n中序非递归遍历二叉树"; if(InOrderTraverse(BiTree)) cout<<"遍历成功"; else{} system("pause");}
阅读全文
0 0
- 中序非递归遍历二叉树
- 中序非递归遍历二叉树
- 二叉树递归遍历
- 二叉树遍历(递归)
- 二叉树递归遍历
- 递归遍历二叉树
- 递归二叉树遍历
- 二叉树递归遍历
- 递归遍历二叉树
- 二叉树递归遍历
- 二叉树——中序非递归遍历二叉树
- 二叉树的递归遍历
- 非递归遍历二叉树
- 二叉树遍历非递归
- 后序非递归遍历二叉树
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- GCC的built-in方法之 —— 原子操作
- Single Number通用解法
- Oracle分析存储过程性能
- hdu1532--Drainage Ditches(最大流(EK算法))
- ELK系统设计:Elasticsearch+logstash + Kibana+Grafana技术架构
- 中序非递归遍历二叉树
- 电影等的评分效果图制作
- go command-line-arguments
- Python需要提交表单爬虫
- 为D3.js中的drag、zoom阻止冒泡和默认事件
- DNS
- 数据可视化的七大趋势
- sscanf与sprintf
- struts2.xml 中的result标签type属性