- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
6.2.2静态“左孩子/右兄弟”表示法方法仍然使用数组存储树中的各结点每个结点元素包括四个域,分别用于存储结点的值、指向其父结点以及指向最左子结点和右侧兄弟结点的指针这种表示法比“子结点表”表示法的空间效率更高,而且每个结点的存储空间大小固定6.2.2静态“左孩子/右兄弟”表示法图6.7“左孩子/右兄弟”表示两棵树6.2.3动态表示法是为每个结点分配可变的存储空间每一个结点都存储一个子结点指针表,其子结点的数目也存储在该结点中即使子结点数目发生变化,那么也只需给该结点重新分配一个大小合适的存储空间就可以了6.2.3动态表示法图6.8使用静态“左孩子/右兄弟”实现对树的归并左孩子在树中是结点的最左子结点,右子结点是结点原来的右侧兄弟结点根的右链就是森林中每棵树的根结点6.2.4动态“左孩子/右兄弟”二叉链表表示法6.2.4动态“左孩子/右兄弟”二叉链表表示法【代码6.6】树结点的抽象数据类型中的关键实现细节//用二叉链表实现树要在代码6.1的TreeNode类中增加以下私有数据成员private: Tm_Value; //树结点的值 TreeNodeT*pChild; //左孩子指针 TreeNodeT*pSibling; //右兄弟指针//部分成员函数的具体实现templateclassTboolTreeNodeT::isLeaf(){ //判断当前结点是否为叶结点 if(pChild==NULL) //如果结点是叶结点返回true returntrue; returnfalse;}6.2.4动态“左孩子/右兄弟”二叉链表表示法templateclassTvoidTreeNodeT::setValue(constTvalue){ //设置结点的值 m_Value=value;}templateclassTvoidTreeNodeT::InsertFirst(TreeNodeT*node){ //以第一个孩子的身份插入结点 if(pChild==NULL) //如果没有子结点 pChild=node; //将node置为子结点 else{ //如果有子结点 node-setSibling(pChild); //将原来子结点置为node的右兄弟 pChild=node; //将node置为子结点 }}6.2.5父指针表示法及在并查集中的应用在某些应用中,只需要知道父结点情况,因此每个结点只需要保存一个指向其父结点的指针域,这种实现被称为父指针(parentpointer)表示法。用数组存储树的所有结点,同时在每个结点中附设一个指针指示其父结点的位置。图6.10父指针表示法6.2.5父指针表示法及在并查集中的应用由于树中每一个结点的父指针是唯一的,所以父指针表示法可以唯一地表示任何一棵树。在这种表示方法下,寻找一个结点的父结点只需要O(1)时间。在树中可以从一个结点出发找出一条向上延伸到达其祖先的路径,即从一个结点到其父亲结点,再到其祖父结点等等。求祖先路径所需要的时间正比于路径上的结点个数,因此父指针表示法对于求树根结点的运算非常方便。并查集并查集是一种特殊的集合,由一些不相交子集构成,合并查集的基本操作是:Find:判断两个结点是否在同一个集合中Union:归并两个集合像栈、队列一样,并查集也是一种重要的抽象数据类型,可以用于求解等价类问题等价类划分等价类需要对集合进行三种操作:构造只含有一个元素的集合判定某个元素所在的子集,目的是为了确定两个元素是否在同一个集合之中。即搜索包含该元素的等价类,对于同一个集合中的元素返回相同的结果,否则返回不同的结果归并两个不相交的集合为一个集合图6.11集合的表示方法等价类树的父指针表示与Union/Find算法实现【代码6.8】树的父指针表示与Union/Find算法实现templateclassTclassParTreeNode { //树结点定义private: T value; //结点的值 ParTreeNodeT*parent;//父结点指针 int nCount;//以此结点为根的子树的总结点个数public: ParTreeNode(); //构造函数 virtual~ParTreeNode(){};
文档评论(0)