每天一道算法题(38)——二叉树的非递归遍历
来源:互联网 发布:vb msg 编辑:程序博客网 时间:2024/05/21 18:40
#include<iostream>#include "stack"using namespace std;struct node{char c;node* left;node *right;bool flag;};void pre(node* head){//非递归前序遍历stack<node*> s;while (head || !s.empty()){if (head){cout << head->c;s.push(head);head = head->left;}else{head = s.top()->right;s.pop();}}}void middle(node* head){//非递归中序遍历stack<node*> s;node* p;while (head || !s.empty()){if (head){s.push(head);head = head->left;}else{p = s.top();cout << p->c;s.pop();head = p->right;}}} void post(node* head){//非递归后序遍历node* p;stack<node*> s;while (head || !s.empty()){if (head){s.push(head);head = head->left;}else{p = s.top();if (p->flag){cout << p->c;s.pop();}else{head = p->right;p->flag = true;//代表右子树已经访问过}}}}int main(int argc, char **argv){node f = { 'f', 0, 0, false };node e = { 'e', &f, 0, false };node d = { 'd', 0, 0, false };node b = { 'b', &d, &e, false };node g = { 'g', 0, 0, false };node c = { 'c', 0, &g, false };node a = { 'a', &b, &c, false };pre(&a);cout << endl;middle(&a);cout << endl;post(&a);}
0 0
- 每天一道算法题(38)——二叉树的非递归遍历
- 二叉树遍历的非递归算法
- 遍历二叉树的非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 【算法题】二叉树非递归遍历
- 每天刷个算法题20160518:非递归二叉树遍历
- 遍历二叉树的递归算法与非递归算法
- 马士兵Java课堂笔记-2-基本数据类型转换问题
- 斗地主- (三)
- web技术概论第二周作业
- 插入、更新与删除数据+Mysql运算符
- 使用魔术方法实现跨文件调用
- 每天一道算法题(38)——二叉树的非递归遍历
- 记录2
- ant学习笔记
- 代码整洁之道(2)
- 黑马程序员——【学习笔记】IO技术——IO流
- MySQL 行锁深入研究(行锁与表锁的内部优化问题)
- Java Applet 的运行原理
- bzoj1003 物流运输trans
- UISwitch之详解