信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...
树型分布网络信号放大器
森林和二叉树的相互转换
并查集
例题:File transfer
#include <iostream>
using namespace std;
//typedef int ElementType;
//typedef int SetName;
//typedef ElementType SetType[MaxSize];
//找到X所在的集合
int s[10001];
int Find(int X) {if (s[X] < 0) return X;else return s[X] = Find(s[X]);
}
void f1(int X1, int X2) {if (Find(X1) == Find(X2)) cout << "yes" << endl;else cout << "no" << endl;
}void Union(int X1, int X2) {int root1 = Find(X1);//X1的树根int root2 = Find(X2);if (root1 < root2) {//说明第一个集合里元素个数多s[root1] += s[root2];//cout << "把" << X1 << "的根节点的值修改为" << s[root1] << endl;s[root2] = root1;//cout << "把" << X2 << "的根节点的值修改为" << s[root2] << endl;}if (root1 > root2) {s[root2] += s[root1];//cout << "把" << X2 << "的根节点的值修改为" << s[root2] << endl;s[root1] = root2;//cout << "把" << X1 << "的根节点的值修改为" << s[root1] << endl;}
}int GetNum(int n) {int temp = 0;for (int i = 1; i <= n; i++) {if (s[i] <0) temp++;}return temp;
}int main() {int N; cin >> N;for (int i = 1; i <= N; i++) s[i] = -1;char choice=NULL;int X1, X2;while (cin >> choice) {switch (choice) {case 'I': {cin >> X1 >> X2;Union(X1, X2);break;}case 'C': {cin >> X1 >> X2;f1(X1, X2);break;}case 'S': {if (GetNum(N) == 1) cout << "The network is connected." << endl;else cout << "There are " << GetNum(N) << " components." << endl;return 0;}}}
}
二叉树遍历的非递归实现
中序遍历
#include <iostream>
#include <stack>
#include <list>
using namespace std;
typedef BinNode* Bintree; //二叉树
struct BinNode {char data;BinNode* left;BinNode* right;
}; //二叉树节点stack<BinNode>S;//二叉树堆栈
//中序遍历
void InOrderTaversal(Bintree BT) {Bintree T = BT;//BT指向树根while (T || !S.empty()) {while (T) { //其实这是递归S.push(*T);T = T->left;}//循环结束说明左边的树空了if (!S.empty()) {//一定到达边界了(T=NULL),可能左树为空,可能右树为空//如果左树为空,只要有节点为空说明可以出栈了*T = S.pop();cout << (*T).data;T = T->right;}}
}
先序遍历
跟中序遍历差不多,不过要在第一次访问一个节点的时候就输出该节点的信息
void PreOrderTaversal(Bintree BT) {Bintree T = BT;//BT指向树根while (T || !S.empty()) {while (T) { //其实这是递归S.push(*T);cout << (*T).data;T = T->left;}//循环结束说明左边的树空了if (!S.empty()) {//一定到达边界了(T=NULL),可能左树为空,可能右树为空//如果左树为空,只要有节点为空说明可以出栈了*T = S.pop();T = T->right;}}
}
后序遍历
stack<BinNode2>s;
void postOrder2(BinTree BT) //非递归后序遍历{BinTree T=BT;while(T||!s.empty()){while(T){BinNode2 bn=new BinNode2(T,1);s.push(bn); T=T->left;}if(!s.empty()){BinNode temp=s.pop();if(temp.isfirst){temp.isfirst=0;s.push(temp);T=temp.btnode->right;}else{cout<<temp.btnode->data;T=NULL;}}}
}
层序遍历(使用队列)
void LevelOrderTraversal(Bintree BT) {Bintree T = BT;list<Bintree>l;l.push_back(T);while (!l.empty()) {*T = l.pop_front();cout << (*T).data;if (T->left) l.push_back(T->left);if (T->right)l.push_back(T->right);}
}
信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...相关推荐
- 【数据结构】--- 二叉树的递归遍历和非递归遍历【C语言实现】
目录 1. 创建一颗二叉树 2.递归前序遍历二叉树 3.递归中序遍历二叉树 4.递归后序遍历二叉树 5. 测试递归打印二叉树代码 6. 非-递归前序遍历二叉树 7. 非-递归实现中序遍历二叉树 8. ...
- 二叉树遍历详解(递归遍历、非递归栈遍历,Morris遍历)
一.前言 <二叉查找树全面详细介绍>中讲解了二叉树操作:搜索(查找).遍历.插入.删除.其中遍历深度优先遍历(DFS)按照实现方法可以分为:递归遍历实现.非递归遍历实现.Morris遍历实 ...
- 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- 漫谈二叉树遍历(非递归)
------这篇文章旨在提出一种简单方便,易于理解时空复杂度低且风格统一的二叉树非递归遍历方法. 从二叉树先序遍历开始 二叉树的先序遍历(非递归)相比中后序是最少花哨.最统一的.一般来说先序遍历的代码 ...
- 二叉树前序、中序和后序遍历的非递归实现
1 二叉树的遍历 1.1 前序遍历 对于每棵子树,先处理根,然后处理左子树,最后处理右子树.根最先访问,所以是前序遍历. 1.2 中序遍历 对于每棵子树,先处理左子树,然后处理根,最后处理右子树.根中 ...
- 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...
- 二叉树先中后序递归遍历与非递归遍历、层次遍历
文章目录 1 先序遍历 1.1 先序遍历递归 1.2 先序遍历非递归 2 中序遍历 2.1 中序遍历递归 2.2 中序遍历非递归 3 后序遍历 3.1 后序遍历递归 3.2 后序遍历非递归 4 层序遍 ...
- 二叉树的遍历(非递归)整理
二叉树的遍历(非递归) 写在前面 二叉树重要,重要,重要.以下代码每日手撸一遍,深刻理解. 二叉树的先序遍历(非递归) 巧记心法 判断是否为空树 1.右侧入栈(访问,q指向右孩子,不空则入栈) 2.p ...
最新文章
- windowbuilder点击按钮出现新界面_掌握这几招,轻松设计出高点击率的行为召唤按钮...
- java jnlp 靠谱吗_获取当前的JNLP信息
- Maven学习总结(57)—— 如何提高 Maven 的构建速度?maven-mvnd 又是什么鬼?
- matlab通用程序,三次样条差值-matlab通用程序
- 不劳烦苹果了!现在,FBI让嫌疑人抬头刷脸就能解锁iPhone
- mysql 拼接符是什么_mysql 字符串拼接
- 为何要搭建大数据分析平台
- BLOCK_TYPE_US_VALID(pHead-nBlockUse)
- 542. 01 矩阵
- Unicode字符串和非Unicode字符串
- 解决文件名太长或文件夹路径太深无法删除
- download.js实现下载的基本用法
- 【日常】《中国统计年鉴》与《中国金融年鉴》数据表爬虫(附1985-2020所有Excel资源)
- 怎么学计算机制作ppt,电脑ppt怎么做
- 科研linux发型版本,[合集]哪些Linux系统科研能用呢 - 优秀的Free OS(Linux)版 - 北大未名BBS...
- 2018 mysql 笔试题_2018秋招数据库笔试面试题汇总
- 【中医养生门户网】注意!春分在于“生、升”,保肝促阳为重
- teamspeak3快速安装
- 笔记本键盘输入错乱,字母都变成数字了
- 用pandas读写HDF5文件
热门文章
- 学习Linux的一些建议
- python遍历目录树_在Python中遍历目录树的速度要快得多?
- win7怎么看服务器文件管理,Win7库文件管理器怎么用 Win7库功能及其使用方法详解...
- linux命令:sosreport
- 【H2 Database】Server模式启动
- android黑色半透明dialog背景,Android开发中Dialog半透明背景消失
- linux can编程,linux CAN编程(二)----------- can_frame中can_id的数据组织形式及处理
- 雷达多普勒频率计算公式_手持式雷达流速仪的监测应用方案
- 数学奥赛用不用计算机,报考自招必看!五大学科竞赛利弊详解,到底哪科最适合你?...
- webpack打包jquery多页_Webpack打包与程序调试