数据结构:二叉树(前,中,后,层次)非递归遍历。
来源:互联网 发布:淘宝网电动葫芦 编辑:程序博客网 时间:2024/05/20 09:44
#include <iostream>#include <stack>#include <map>#include <queue>#include <string.h>using namespace std;struct Node{ char data; Node *left; Node *right; Node(char d = char()):data(d),left(NULL),right(NULL){}};class Tree{ public: Tree():root(NULL){} void Create(char *LVR,char *LRV) { int n = strlen(LRV); Create(root,LVR,LRV,n); } void PrintfV()//中序 { Node *t = root; if(t==NULL)return; stack<Node*> st; while(t!=NULL || st.empty()==false) { while(t!=NULL) { st.push(t); t=t->left; } t = st.top(); st.pop(); cout<<t->data<<" "; t=t->right; } cout<<endl; } void PrintfR()//后序 { Node *t = root; if(t==NULL)return; stack<Node*> st; map<Node*,bool> mp;//test visted,记录是否已经遍历。 while(1) { while(t!=NULL && mp.find(t->left)==mp.end()) { st.push(t); t=t->left; } t = st.top(); if(t->right==NULL) { cout<<t->data<<" "; mp.insert(pair<Node*,bool>(t,true)); st.pop(); t = st.top(); continue; } if(mp.find(t->right)==mp.end()&&t->right!=NULL) {//查询是否已经存在map中,虽然低效,可是直观。 t=t->right; continue; } if(mp.find(st.top())==mp.end()) { cout<<st.top()->data<<" "; mp.insert(pair<Node*,bool>(t,true)); st.pop(); if(st.size()>0) t = st.top(); } if(st.empty()!=false)break; } cout<<endl; } void PrintfL()//前序 { Node *t = root; if(t==NULL)return; stack<Node*> st; while(t!=NULL || st.empty()==false) { while(t!=NULL) { cout<<t->data<<" "; st.push(t); t=t->left; } t = st.top(); st.pop(); t=t->right; } cout<<endl; } void Sprintf()//层次 { Node *t = root; if(t==NULL)return; queue<Node*> st; st.push(t); while(st.empty()==false) { Node *p = st.front(); cout<<p->data<<" "; st.pop(); if(p->left!=NULL) { st.push(p->left); } if(p->right!=NULL) { st.push(p->right); } } cout<<endl; } private: void Create(Node *&t,char *LVR,char *LRV,int n) {//根据中序和后序构造二叉树,用n记录作为标记个数。 if(n==0)return; int i = 0; while(LRV[n-1]!=LVR[i])i++; t = new Node(LRV[n-1]); Create(t->right,LVR+i+1,LRV+i,n-i-1); Create(t->left,LVR,LRV,i); } private: Node *root;};int main(){ char LVR[]="CBDAFEG"; char LRV[]="CDBFGEA"; Tree t; t.Create(LVR,LRV); t.PrintfV(); t.PrintfL(); t.PrintfR(); t.Sprintf(); return 0;}
1 0
- 数据结构:二叉树(前,中,后,层次)非递归遍历。
- 二叉树前、中、后及层次非递归遍历
- 二叉树:前序,后序,中序遍历(递归+非递归);层次(队列)
- 二叉树的非递归遍历以及层次遍历(前序、中序、后序)
- (C语言版)二叉树遍历算法——包含递归前、中、后序和层次,非递归前、中、后序和层次遍历共八种
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
- 数据结构:二叉树的前序,中序,后序遍历(递归和非递归)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树遍历(前序、中序、后序、非递归中序、层次)
- 二叉树非递归前序,中序,后序,层次遍历
- 二叉树的非递归前序、中序、后序、层次遍历
- C++ 语法
- 连接器 ELF格式 装载可执行文件与虚拟进程空间
- 数据结构和算法系列15 线索二叉树
- 进程间通信概述
- c++primer之try语句块和异常处理
- 数据结构:二叉树(前,中,后,层次)非递归遍历。
- 面试问题疑点总结
- 九度oj-1158-买房子
- Opencv 三次样条曲线(Cubic Spline)插值
- c# 自定义控件
- (GNU C)__attribute__机制
- 欢迎使用CSDN-markdown编辑器
- JavaScript--点击颜色,为主题更换背景颜色
- AndroidStudio错误local path doesn't exist解决办法