树的非递归便利,中序和后序
来源:互联网 发布:快速出效果图软件 编辑:程序博客网 时间:2024/06/03 11:38
把递归转成非递归的基本思想是用栈保留临时状态。对于先序遍历很简单,对于中序和后序遍历要稍微麻烦点。
分析中序的过程:对于当前节点,如果有左子树,说明不是当前应该访问的节点,应该入栈然后考察其左子树,否则就在出栈的过程中访问该节点。如果访问了当前节点后,其有右子树,则应该访问其右子树后,再访问其父节点,因此要优先考察右节点。
分析后序的过程:对于当前节点,如果有左子树,同中序。如果出栈后没有右子树,则访问。如果有右子树,则不能出栈,并且访问右子树,等到再次在出栈的过程中发现这个节点就访问。
#include<iostream>#include<malloc.h>#include<stack>#include<set>using namespace std;typedef struct treenode{int data;treenode *left;treenode *right;}treenode;bool error = false;treenode* precreate(){int data;cin>>data;if(data == 0 || error)return NULL;treenode *node = (treenode*)malloc(sizeof(treenode));if(node == NULL){error = true;return NULL;}node->data = data;node->left = precreate();node->right = precreate();return node;}void midsearch(treenode *root){treenode *p = root;stack<treenode*> stac;while(p!=NULL){stac.push(p);p = p->left;}while(!stac.empty()){p = stac.top();stac.pop();cout<<p->data<<endl;if(p->right != NULL){p = p->right;while(p!=NULL){stac.push(p);p = p->left;}}}}void postsearch(treenode *root){set<treenode*> once;stack<treenode*> stac;treenode* p = root;while(p != NULL){stac.push(p);p = p->left;}while(!stac.empty()){p = stac.top();stac.pop();if(p->right == NULL)cout<<p->data<<endl;else{if(once.find(p)!=once.end()){cout<<p->data<<endl;}else{stac.push(p);once.insert(p);p = p->right;while(p != NULL){stac.push(p);p = p->left;}}}}}void treefeidigui_foo(){treenode *root = precreate();//midsearch(root);postsearch(root);}
- 树的非递归便利,中序和后序
- 中序和后序便利二叉树(非递归)
- 二叉树的前序、中序、后序的实现(递归和非递归)
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- java实现树的前序,中序,后序的递归和非递归遍历
- 二叉树的先序、中序、后序的递归和非递归算法
- 二叉树的创建和先序,中序,后序,递归,非递归遍历
- 二叉树的先序,中序,后序递归和非递归实现
- 数据结构:二叉树的前序,中序,后序遍历(递归和非递归)
- 二叉树的递归和非递归遍历(前序、中序、后序)
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 二叉树的前序,中序,后序遍历。用递归和非递归实现
- 二叉树的先序、中序、后序递归遍历和非递归遍历
- 二叉树的递归和非递归前、中、后序遍历
- 前,中,后序遍历二叉树 (递归 && 非递归的栈 && 非递归非栈的线索二叉树)
- 树的前序遍历非递归、中序遍历非递归、后序遍历非递归
- c/c++实现二叉树前序,中序和后序的递归和非递归遍历
- 二叉树非递归后序遍历(非递归遍历中最麻烦的一个)
- poj 3750
- 数据结构——键树之双链表
- C语言深度解剖读书笔记(1.关键字的秘密)
- 话说MongoDB的存储格式BSON
- oracle 正则表达式
- 树的非递归便利,中序和后序
- Git——git 使用技巧
- Kalido MDM 笔记 3
- c语言库函数大全
- 数据结构——B-树的查找和插入
- 全面解析Unity3D自动生成的脚本工程文件
- monkey
- 严苛模式(StrictMode) .
- hdu1286 找新朋友 (欧拉函数)