树型分布网络信号放大器

森林和二叉树的相互转换

并查集

例题: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,遍历的非递归实现)...相关推荐

  1. 【数据结构】--- 二叉树的递归遍历和非递归遍历【C语言实现】

    目录 1. 创建一颗二叉树 2.递归前序遍历二叉树 3.递归中序遍历二叉树 4.递归后序遍历二叉树 5. 测试递归打印二叉树代码 6. 非-递归前序遍历二叉树 7. 非-递归实现中序遍历二叉树 8.  ...

  2. 二叉树遍历详解(递归遍历、非递归栈遍历,Morris遍历)

    一.前言 <二叉查找树全面详细介绍>中讲解了二叉树操作:搜索(查找).遍历.插入.删除.其中遍历深度优先遍历(DFS)按照实现方法可以分为:递归遍历实现.非递归遍历实现.Morris遍历实 ...

  3. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  4. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  5. 漫谈二叉树遍历(非递归)

    ------这篇文章旨在提出一种简单方便,易于理解时空复杂度低且风格统一的二叉树非递归遍历方法. 从二叉树先序遍历开始 二叉树的先序遍历(非递归)相比中后序是最少花哨.最统一的.一般来说先序遍历的代码 ...

  6. 二叉树前序、中序和后序遍历的非递归实现

    1 二叉树的遍历 1.1 前序遍历 对于每棵子树,先处理根,然后处理左子树,最后处理右子树.根最先访问,所以是前序遍历. 1.2 中序遍历 对于每棵子树,先处理左子树,然后处理根,最后处理右子树.根中 ...

  7. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

    给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...

  8. 二叉树先中后序递归遍历与非递归遍历、层次遍历

    文章目录 1 先序遍历 1.1 先序遍历递归 1.2 先序遍历非递归 2 中序遍历 2.1 中序遍历递归 2.2 中序遍历非递归 3 后序遍历 3.1 后序遍历递归 3.2 后序遍历非递归 4 层序遍 ...

  9. 二叉树的遍历(非递归)整理

    二叉树的遍历(非递归) 写在前面 二叉树重要,重要,重要.以下代码每日手撸一遍,深刻理解. 二叉树的先序遍历(非递归) 巧记心法 判断是否为空树 1.右侧入栈(访问,q指向右孩子,不空则入栈) 2.p ...

最新文章

  1. windowbuilder点击按钮出现新界面_掌握这几招,轻松设计出高点击率的行为召唤按钮...
  2. java jnlp 靠谱吗_获取当前的JNLP信息
  3. Maven学习总结(57)—— 如何提高 Maven 的构建速度?maven-mvnd 又是什么鬼?
  4. matlab通用程序,三次样条差值-matlab通用程序
  5. 不劳烦苹果了!现在,FBI让嫌疑人抬头刷脸就能解锁iPhone
  6. mysql 拼接符是什么_mysql 字符串拼接
  7. 为何要搭建大数据分析平台
  8. BLOCK_TYPE_US_VALID(pHead-nBlockUse)
  9. 542. 01 矩阵
  10. Unicode字符串和非Unicode字符串
  11. 解决文件名太长或文件夹路径太深无法删除
  12. download.js实现下载的基本用法
  13. 【日常】《中国统计年鉴》与《中国金融年鉴》数据表爬虫(附1985-2020所有Excel资源)
  14. 怎么学计算机制作ppt,电脑ppt怎么做
  15. 科研linux发型版本,[合集]哪些Linux系统科研能用呢 - 优秀的Free OS(Linux)版 - 北大未名BBS...
  16. 2018 mysql 笔试题_2018秋招数据库笔试面试题汇总
  17. 【中医养生门户网】注意!春分在于“生、升”,保肝促阳为重
  18. teamspeak3快速安装
  19. 笔记本键盘输入错乱,字母都变成数字了
  20. 用pandas读写HDF5文件

热门文章

  1. 学习Linux的一些建议
  2. python遍历目录树_在Python中遍历目录树的速度要快得多?
  3. win7怎么看服务器文件管理,Win7库文件管理器怎么用 Win7库功能及其使用方法详解...
  4. linux命令:sosreport
  5. 【H2 Database】Server模式启动
  6. android黑色半透明dialog背景,Android开发中Dialog半透明背景消失
  7. linux can编程,linux CAN编程(二)----------- can_frame中can_id的数据组织形式及处理
  8. 雷达多普勒频率计算公式_手持式雷达流速仪的监测应用方案
  9. 数学奥赛用不用计算机,报考自招必看!五大学科竞赛利弊详解,到底哪科最适合你?...
  10. webpack打包jquery多页_Webpack打包与程序调试