C++二叉树操作问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C二叉树操作问题

VC++课程设计报告 ——二叉树操作问题 一、程序功能介绍 带枚举值的二叉树的实现,利用枚举值使二叉树的组成尽量平衡,及左右子树的级数相差不多。可以完成二叉树结点的数据的插入、删除、查找和输出功能。 二、课程设计要求 (1)仔细阅读程序,回答下列问题: a.枚举值Red和Black在程序中的作用是什么,Red的结点和Black的结点有何区别? b.一个结点的左右子树最多可以相差几级,为什么? c.程序是通过那些函数来调整二叉树左右子树的结构,举例说明如何调整。 (2)增加对二叉树上结点中数据进行由大到小排序的函数 (3)增加对二叉树上结点中数据进行由小到大排序的函数 (4)修改main函数,增加菜单选项,使得用户可以通过键盘反复输入命令或数值,查看运行结果。 三、课程设计完成情况 对于要求(1)a.帮助调节左右子树,使左右子树的级数相差不多,且使数据的插入和删除操作较简单。Red的前序必为Black,若有左右子树也必为Black。而Black不作要求。b.最多相差2级。现在考虑级数相差最多的情况,假设当左右子树的级数相同时,在左支的左侧插入一个数据,则相差1级。再在左支结点最多一支插入一个数据,若数据前为黑色,则级数相差2;若为红色,数据插入后调整使得最终级数相差1,再插数若级数变为2,则讨论类似后叙.最后讨论相差2的情况,再在左支末端插入一个数据,由于前后颜色均为红色则调整,调整后级数相差又为2,若仍在左支末端插入数据级数一直相差2,直到相差1,则讨论重复以上。c.通过void RotateLeft(RBnode* x)和 void RotateRight(RBnode* x)调节二叉树左右子树的结构。举例:对于void RotateLeft(RBnode* x),举其中一种普遍情况来说: 对于要求(2)、(3)、(4),通过增加了void up(int *p); void down(int *q); double average();这三个函数完成设计要求。 四、程序运行和分析 (1)void up(int *p)用于数据升序,将main函数中定义的数组首地址传给p。再利用T Max (const T val) 和T Min (const T val)得到最大和最小值,将最小值赋给*p,即给数组中的第一项赋值。然后利用函数T Succ (const T val)找到比数组中的第一项大且最接近的数并赋给数组中第二项。以此类推,直到找到最大值并赋给数组,此时结束程序,而数组中的数据按由小到大排列。(2)void down(int *q)原理同(1),只是先将最大值赋给数组中的第一项,且利用函数T Pred(const T val)寻找较小值。(3)对于求平均值,参考输出二叉树的形状的函数利用递归将所有数遍历一遍,从而求得总和,再除以个数极为平均值。特殊情况:当个数为零是,不能作除法,则单独列出,返回平均值0. 五、源程序 #includeiostream.h #includefstream.h #includestdlib.h #ifndef _RBTREE_H #define _RBTREE_H templateclass T class RBtree { public: enum Color{Red,Black}; private: class RBnode { T value; Color color; RBnode *p; RBnode *left; RBnode *right; RBnode():value(0),color(Red),p(NULL),left(NULL),right(NULL){};//缺省构造 RBnode(const T val):value(val),color(Red),p(NULL),left(NULL),right(NULL){};//数据初始化 friend class RBtreeT;//二叉树是其友元类 public: void Print(int level)//输出 { for(int i=0;ilevel;++i) // 输出空格对齐用 cout ; cout|value; // 输出格式|value(color) if (color==Black) cout(B); else cout(R); return; } }; RBnode *ROOT; RBnode *NIL; int alive; // 结点个数 public: RBtree():ROOT(new RBnode()),NIL(ROOT

文档评论(0)

zhuwenmeijiale + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档