C++先,中,后顺序遍历的非递归实现
2015-11-24 14:03
411 查看
二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的)。下面详细介绍三种遍历方式的非递归实现。
先创建树节点
struct tree //创建树节点
{
int data;
tree*left,*right;
};
根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历。
先创建树节点
struct tree //创建树节点
{
int data;
tree*left,*right;
};
根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历。
void preorder(tree*temp)//先序遍历非递归实现 { stack<tree*>s; if(temp==NULL) return ; s.push(temp); tree*p; while(!s.empty()) { while(p=s.top()) { cout<<p->data<<" "; s.push(p->left); } s.pop(); if(!s.empty()) { p=s.top(); s.pop(); s.push(p->right); } } }
void inorder(tree*temp)//中序遍历非递归实现 { stack<tree*>s; if(temp==NULL) return ; s.push(temp); tree*p; while(!s.empty()) { while(p=s.top()) { s.push(p->left); } s.pop(); if(!s.empty()) { p=s.top(); s.pop(); cout<<p->data<<" "; s.push(p->right); } } }
void postorder(tree*temp)//后序遍历非递归实现 { stack<tree*>s; if(temp==NULL) return ; s.push(temp); tree*p; while(!s.empty()) { while(p=s.top()) { s.push(p->left); } s.pop(); if(!s.empty()) { p=s.top(); s.pop(); s.push(p->right); cout<<p->data<<" "; } } }
相关文章推荐
- C++之日志打印
- 第一章:C语言数据类型
- C语言-----循环单链表
- PVS-Studio C/C++/C++11 静态代码分析工具
- 线程安全的的map-CSuperMap
- 《C++编程规范:101条规则、准则与最佳实践》学习笔记
- vs2012编译c语言-指针不能判NULL
- 迷宫最少步数的求解(利用队列)
- 《C++必知必会》学习笔记
- C++笔记(8) template partitial specialization模板偏特化
- c++实现封装socket2
- 顺序队的基本操作(C++完整代码)
- C语言常见命名规范
- C++学习中关于cout遇到的一个小问题
- c++调试重要武器GetLastError
- C语言 side effect和sequence point
- vector 中生成一大批线程并等待完成
- 【转】使用C语言实现MD5消息摘要算法
- 【C语言】 浅谈指针
- c\c++ codeblocks编译常见错误