近亲树实现文件C++
// nearTree.cpp -- 近亲树实现文件 #include "stdafx.h" #include "nearTree.h" namespace tree { // private: int NearTree :: m_Min (const int a, const int b, const int c, const int d) const { int min = a ; if (min > b) min = b ; if (min > c) min = c ; if (min > d) min = d ; return min ; } Item NearTree :: m_FindMin (const Node * pn) const { while (pn -> left) pn = pn -> left ; return pn -> item ; } Node * NearTree :: m_Updata (Node * const pn) const { int leftMinGap, rightMinGap, itemReduceLeftMax, rightMinReduceItem ; leftMinGap = rightMinGap = itemReduceLeftMax = rightMinReduceItem = INFINITY ; if (pn -> left) { pn -> minOfAll = pn -> left -> minOfAll ; leftMinGap = pn -> left -> minGap ; itemReduceLeftMax = pn -> item - pn -> left -> maxOfAll ; } else pn -> minOfAll = pn -> item ; if (pn -> right) { pn -> maxOfAll = pn -> right -> maxOfAll ; rightMinGap = pn -> right -> minGap ; rightMinReduceItem = pn -> right -> minOfAll - pn -> item ; } else pn -> maxOfAll = pn -> item ; pn -> minGap = m_Min (leftMinGap, rightMinGap, itemReduceLeftMax, rightMinReduceItem) ; return pn ; } Node * NearTree :: m_MakeNode (const Item item) const { Node * newNode = new Node ; if (newNode) { newNode -> item = item ; newNode -> minOfAll = newNode -> maxOfAll = item ; newNode -> minGap = INFINITY ; newNode -> left = newNode -> right = NULL ; } return newNode ; } Node * NearTree :: m_Insert (Node * pn, const Item item) { if (pn) { if (item < pn -> item) pn -> left = m_Insert (pn -> left, item) ; else pn -> right = m_Insert (pn -> right, item) ; if (false == m_outOfSpace) pn = m_Updata (pn) ; } else { pn = m_MakeNode (item) ; if (!pn) m_outOfSpace = true ; } return pn ; } Node * NearTree :: m_Delete (Node * pn, const Item item) { if (pn) { if (item < pn -> item) pn -> left = m_Delete (pn -> left, item) ; else if (item > pn -> item) pn -> right = m_Delete (pn -> right, item) ; else { if (pn -> left && pn -> right) { Item min = m_FindMin (pn -> right) ; pn -> item = min ; pn -> right = m_Delete (pn -> right, min) ; } else if (pn -> left) { Node * temp = pn ; pn = pn -> left ; delete temp ; m_deleted = true ; } else { Node * temp = pn ; pn = pn -> right ; delete temp ; m_deleted = true ; } } if (m_deleted && pn) pn = m_Updata (pn) ; } return pn ; } void NearTree :: m_Release (Node * const pn) const { if (pn) { m_Release (pn -> left) ; m_Release (pn -> right) ; delete pn ; } } // public: NearTree :: NearTree (void) { m_root = NULL ; m_outOfSpace = false ; m_deleted = false ; } bool NearTree :: Insert (const Item item) { m_root = m_Insert (m_root, item) ; if (true == m_outOfSpace) { m_outOfSpace = false ; return false ; } else return true ; } bool NearTree :: Delete (const Item item) { m_root = m_Delete (m_root, item) ; if (m_deleted) { m_deleted = false ; return true ; } else return false ; } int NearTree :: FindMinGap (void) const { if (m_root) return m_root -> minGap ; else return INFINITY ; } NearTree :: ~NearTree (void) { m_Release (m_root) ; } }
近亲树实现文件C++相关推荐
- 面试题:mysql 表删除一半数据,B+树索引文件会不会变小???
今日寄语:努力的阶段,往往是最不养生的阶段! 一张千万级的数据表,删除了一半的数据,你觉得B+树索引文件会不会变小? (答案在文章中!!) 我们先来做个实验,看看表的大小是如何变化的?? 做个实验,让 ...
- 哈夫曼树实现文件的压缩与解压缩
利用哈夫曼树实现文件的压缩与解压缩 压缩: 1.统计出文件中相同字符出现的次数 2.获取哈夫曼编码 次数作为权值构建哈夫曼树 3.重新编码,写回压缩文件 保存头文件: 源文件后缀 编码信息的行数 每个 ...
- maven打印依赖树到文件中
maven打印依赖树到文件中: mvn dependency:tree >> D:/tree.txt
- 自顶向下伸展树实现文件C语言
/* SplayTree.c -- 自顶向下伸展树实现文件 */ #include "SplayTree.h" /* 外部变量引用 */ extern Node * NullNod ...
- 【小项目】用Huffman树实现文件压缩并解压
一.前言 如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果已经学习了Huffman树,为何不尝试写一个压缩程序出来呢? 如果你没有学习 ...
- 文件高阶操作复制查找处理目录树打包文件shutil
文件高阶操作复制查找处理目录树打包文件shutil 1.概述 shutil模块包含了文件高级操作,比如复制文件.查找文件.处理目录树.打包文件. 2.复制文件 2.1.文件对文件复制copyfile ...
- 用赫夫曼树进行文件解压
思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...
- 用赫夫曼树进行文件的压缩
思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...
- c语言文件压缩与解压缩实验报告,哈弗曼树的文件压缩和解压实验报告(C语言).doc...
Lab05 树结构的应用 学号: 姓名: 实验时间:2011.5.24 1.问题描述 哈弗曼树的编码与译码 - 功能:实现对任何类型文件的压缩与解码 - 输入:源文件,压缩文件 - 输出:解码正确性判 ...
最新文章
- 自动设置为兼容模式html5,HTML5中怎么调兼容性?
- Ubuntu系统启动错误问题的解决
- cmos摄像头如何识别颜色_绝对实用!开车上路怕违章 教你如何识别各种违章摄像头...
- unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...
- 想对你们每个人说的话
- css的再深入9(更新中···)
- 干货丨总结5类面试官特点和应对方法
- 【opencv+python】下载安装教程
- python快速排序最简单写法_面试官:来,这位精神小伙,简简单单写个快速排序吧...
- 用 O(1) 时间检测整数 n 是否是 2 的幂次。
- 爬虫实例九 豆瓣电影详情信息
- sap 归档(ARCHIVE)
- 用友/U8+V16.0修改单据时,其他入库单其他出库单无保质期信息且置灰无法输入/修改
- 如何改变证件照大小?三步搞定
- td-agent(Fluentd)的使用
- 为大家整理一波程序员才懂的扎心图片!看不懂别说自己是程序员!
- 少儿编程网站源码和scratch课程
- Flutter 动画-渐变
- 学了代码之后,对于程序员黑客的区别,我的认识是......
- 程序员找工作,应该怎么应对面试官?