二叉树的有关操作
来源:互联网 发布:复杂网络的发展 编辑:程序博客网 时间:2024/05/24 06:03
struct BTreeNode{ char data; BTreeNode *left; BTreeNode *right;};//创建二叉树void createBTree(BTreeNode*&T){ char c; cin>>c; if(c=='#') { T= nullptr; }else { T=new BTreeNode; T->data=c; createBTree(T->left); createBTree(T->right); }}//前序递归遍历void preTraverse(BTreeNode *T){ if(T) { cout<<T->data; preTraverse(T->left); preTraverse(T->right); }}//中序递归遍历void midTraverse(BTreeNode *T){ if(T) { midTraverse(T->left); cout<<T->data; midTraverse(T->right); }}//后续递归遍历void lastTraverse(BTreeNode *T){ if(T) { lastTraverse(T->left); lastTraverse(T->right); cout<<T->data; }}//中序非递归遍历void midTrace(BTreeNode *T){ if(T== nullptr)return; BTreeNode *p=T; stack<BTreeNode*>s; while(!s.empty()||p) { while(p) { s.push(p); p=p->left; } if(!s.empty()) { p=s.top(); cout<<setw(4)<<p->data; s.pop(); p=p->right; } }}//前序非递归遍历void preTrace(BTreeNode *T){ if(T== nullptr)return; BTreeNode *p=T; stack<BTreeNode*>s; while(!s.empty()||p) { while(p) { cout<<setw(4)<<p->data; s.push(p); p=p->left; } if(!s.empty()) { p=s.top(); s.pop(); p=p->right; } }}//后续非递归遍历void lastTrace(BTreeNode *T){ if(T== nullptr)return; stack<BTreeNode*>s; BTreeNode *pCur=T; BTreeNode *lastVisit; while(pCur) { s.push(pCur); pCur=pCur->left; } //此时p已经指左子树下边 while(!s.empty()) { pCur=s.top(); s.pop(); if(pCur->right== nullptr||pCur->right==lastVisit) { cout<<setw(4)<<pCur->data; lastVisit=pCur; }else { s.push(pCur); pCur=pCur->right; while(pCur) { s.push(pCur); pCur=pCur->left; } } }}//层先遍历void layerTrace(BTreeNode *T){ if(T== nullptr)return; BTreeNode *p=T; queue<BTreeNode*>q; q.push(p); while(!q.empty()) { p=q.front(); q.pop(); cout<<setw(4)<<p->data; if(p->left!= nullptr)q.push(p->left); if(p->right!= nullptr)q.push(p->right); }}
阅读全文
0 0
- 二叉树的有关操作
- 二叉树的有关操作
- 二叉树的有关操作
- 有关树二叉树的一些操作
- 有关二叉树操作的代码实现
- 有关二叉树的部分操作
- 数据结构中二叉树的有关操作汇总
- 二叉树性质和有关操作汇总
- 有关二叉树的计算
- 有关二叉树的中序遍历
- 有关二叉树的简单实现
- 有关二叉树的常见算法
- 有关二叉树的遍历问题
- 【数据结构】---二叉树有关的面试题
- 二叉树有关的高频面试题
- 有关二叉树的递归算法
- 有关目录树的操作
- 二叉树的操作
- 51Nod
- pandas教程------筛选计数统计(12/4)
- scapy安装在win7上
- ARM笔记(中断)
- JAVA | 49
- 二叉树的有关操作
- Numpy学习——数组填充np.pad()函数的应用
- 关于后台问题的一些思考
- Altium Designer高级功能初探之——覆铜规则
- AXIS2发布WebService
- Android语言切换的源码分析
- 单例模式和多线程
- 异或运算
- peak-linux-driver编译问题,无法找到popt.h