博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构C++ 二叉树——二叉树的应用
阅读量:6367 次
发布时间:2019-06-23

本文共 3354 字,大约阅读时间需要 11 分钟。

信号放大器问题的 结构 booster 在 booster.h 中定义:

1 #pragma once 2 #include 
3 4 using namespace std; 5 6 struct booster 7 { 8 int degradeToLeaf; //到达子节点的信号衰减量 9 int degradeFromParent; //父节点到此的信号衰减量10 bool boosterHere; // 放置了信号放大器,值为真11 12 void output(ostream& out) const13 {
out << boosterHere << ' ' << degradeToLeaf << ' ' << degradeFromParent << ' ';}14 };15 16 // overload <<17 ostream& operator<<(ostream& out, booster x)18 {x.output(out); return out;}

并查集问题所需的结构 unionFindNode 定义在 unionFindNode.h 中:

1 #pragma once 2 using namespace std; 3  4  5 struct unionFindNode 6 { 7     int parent;  // root 为真时,表示树的重量;为假时表示父节点的指针 8     bool root;   // 为根时,值为真 9 10     unionFindNode()11     {12         parent = 1; root = true;13     }14 };

application.h :

1 #pragma once 2 #include "booster.h" 3 #include "binaryTreeNode.h" 4 #include "linkBinaryTree.h" 5 #include "unionFindNode.h" 6  7  8 //信号放大器 9 void placeBoosters(binaryTreeNode
*x, int tolerance);10 11 //并查集12 void initialize(int numberOfElements);13 int find(int theElement);14 void unite(int rootA, int rootB);

application.cpp :

1 #include 
2 #include "application.h" 3 4 using namespace std; 5 6 7 /************************************************************************************* 8 // 信号放大器 9 *************************************************************************************/10 //x,二叉树节点; tolerance,最大容忍衰减11 void placeBoosters(binaryTreeNode
*x, int tolerance)12 {13 x->element.degradeToLeaf = 0; // x处衰减量初始化14 15 //计算x的左子树的衰减量,如果大于阈值,则放置信号放大器16 binaryTreeNode
*y = x->leftChild;17 if (y != nullptr)18 {19 int degradation = y->element.degradeToLeaf + y->element.degradeFromParent;20 if (degradation > tolerance) //衰减大于阈值,放置信号放大器21 {22 y->element.boosterHere = true;23 x->element.degradeToLeaf = y->element.degradeFromParent;24 }25 else26 x->element.degradeToLeaf = degradation;27 }28 29 //计算x的右子树的衰减量,如果大于阈值,则放置信号放大器30 y = x->rightChild;31 if (y != nullptr)32 {33 int degradation = y->element.degradeToLeaf + y->element.degradeFromParent;34 if (degradation > tolerance) //衰减大于阈值,放置信号放大器35 {36 y->element.boosterHere = true;37 degradation = y->element.degradeFromParent;38 }39 else40 x->element.degradeToLeaf = degradation;41 }42 }43 44 45 /*************************************************************************************46 // 并查集47 *************************************************************************************/48 int *parent;49 void initialize(int numberOfElements) //初始化 numberOfElements 棵树50 {51 parent = new int[numberOfElements + 1];52 for (int e = 1; e <= numberOfElements; e++)53 parent[e] = 0;54 }55 56 int find(int theElement) //查找,返回 theElement 所在的树的根57 {58 while (parent[theElement] != 0)59 theElement = parent[theElement]; //向上移动一层60 return theElement;61 }62 63 void unite(int rootA, int rootB) //合并64 {65 parent[rootB] = rootA;66 }

 

转载于:https://www.cnblogs.com/peformer/p/8058583.html

你可能感兴趣的文章
消除GitHub上的历史记录
查看>>
自学 JAVA 的几点建议
查看>>
第十三天-企业应用架构模式-对象-关系元数据映射模式
查看>>
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
查看>>
Python 比特币教程之二: 机器人收发比特币
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
怎样将优酷网站下载的视频KUX转MP4格式
查看>>
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>
关于 Promise 的 9 个提示
查看>>
算法复习
查看>>
安卓中高级开发面试知识点之——缓存
查看>>
Java的初始化顺序
查看>>
js 判断回文字符串
查看>>
shields小徽章是如何生成的?以及搭建自己的shield服务器
查看>>
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>