// 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++相关推荐

  1. 面试题:mysql 表删除一半数据,B+树索引文件会不会变小???

    今日寄语:努力的阶段,往往是最不养生的阶段! 一张千万级的数据表,删除了一半的数据,你觉得B+树索引文件会不会变小? (答案在文章中!!) 我们先来做个实验,看看表的大小是如何变化的?? 做个实验,让 ...

  2. 哈夫曼树实现文件的压缩与解压缩

    利用哈夫曼树实现文件的压缩与解压缩 压缩: 1.统计出文件中相同字符出现的次数 2.获取哈夫曼编码 次数作为权值构建哈夫曼树 3.重新编码,写回压缩文件 保存头文件: 源文件后缀 编码信息的行数 每个 ...

  3. maven打印依赖树到文件中

    maven打印依赖树到文件中: mvn dependency:tree >> D:/tree.txt

  4. 自顶向下伸展树实现文件C语言

    /* SplayTree.c -- 自顶向下伸展树实现文件 */ #include "SplayTree.h" /* 外部变量引用 */ extern Node * NullNod ...

  5. 【小项目】用Huffman树实现文件压缩并解压

    一.前言 如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果已经学习了Huffman树,为何不尝试写一个压缩程序出来呢? 如果你没有学习 ...

  6. 文件高阶操作复制查找处理目录树打包文件shutil

    文件高阶操作复制查找处理目录树打包文件shutil 1.概述 shutil模块包含了文件高级操作,比如复制文件.查找文件.处理目录树.打包文件. 2.复制文件 2.1.文件对文件复制copyfile ...

  7. 用赫夫曼树进行文件解压

    思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...

  8. 用赫夫曼树进行文件的压缩

    思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...

  9. c语言文件压缩与解压缩实验报告,哈弗曼树的文件压缩和解压实验报告(C语言).doc...

    Lab05 树结构的应用 学号: 姓名: 实验时间:2011.5.24 1.问题描述 哈弗曼树的编码与译码 - 功能:实现对任何类型文件的压缩与解码 - 输入:源文件,压缩文件 - 输出:解码正确性判 ...

最新文章

  1. 自动设置为兼容模式html5,HTML5中怎么调兼容性?
  2. Ubuntu系统启动错误问题的解决
  3. cmos摄像头如何识别颜色_绝对实用!开车上路怕违章 教你如何识别各种违章摄像头...
  4. unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...
  5. 想对你们每个人说的话
  6. css的再深入9(更新中···)
  7. 干货丨总结5类面试官特点和应对方法
  8. 【opencv+python】下载安装教程
  9. python快速排序最简单写法_面试官:来,这位精神小伙,简简单单写个快速排序吧...
  10. 用 O(1) 时间检测整数 n 是否是 2 的幂次。
  11. 爬虫实例九 豆瓣电影详情信息
  12. sap 归档(ARCHIVE)
  13. 用友/U8+V16.0修改单据时,其他入库单其他出库单无保质期信息且置灰无法输入/修改
  14. 如何改变证件照大小?三步搞定
  15. td-agent(Fluentd)的使用
  16. 为大家整理一波程序员才懂的扎心图片!看不懂别说自己是程序员!
  17. 少儿编程网站源码和scratch课程
  18. Flutter 动画-渐变
  19. 学了代码之后,对于程序员黑客的区别,我的认识是......
  20. 程序员找工作,应该怎么应对面试官?

热门文章

  1. Unity3d 制作铁链子
  2. 13个定义了宇宙的著名常数
  3. PHP 伪静态规则、写法
  4. 面向对象IOS编程中的聚合与耦合
  5. windows 控制台操作命令
  6. Latex悬挂缩进——整段缩进or列表符号不缩进,段落缩进
  7. 汇通达打响农村电商上市第一枪
  8. PhotoFilter for Insta Like Support Of Technology
  9. 服务器租用一般价格是多少合适
  10. asp.net943-汽车4S店保养预约系统设计#毕业设计