首页 > 其他分享 >顺序存储的满m叉树编号为 k 的结点的双亲结点的编号

顺序存储的满m叉树编号为 k 的结点的双亲结点的编号

时间:2023-09-18 23:23:49浏览次数:35  
标签:结点 le frac 双亲 编号 顺序存储

顺序存储的满m叉树

编号为 i 的结点的孩子结点的编号的范围

设其编号为k,在它之前的结点个数等于 i 结点之前的每个结点的孩子数,再加上一个根节点,于是

\[k=(i-1)m+1+1\\(i-1)m+2 \]

最后一个孩子结点的编号

\[k+m-1=(i-1)m+2+m-1\\=(i-1)m+m+1 \]

编号为 k 的结点的双亲结点的编号

假设编号为 k 的结点的双亲结点的编号为 i ,则它们一定满足下列关系

\[(i-1)m+2\le k \le(i-1)m+(m+1) \]

同时减去2,方便取整

\[(i-1)m\le k-2\le(i-1)m+m-1 \]

两边同时除以m

\[(i-1)\le \frac{k-2}{m}\le(i-1)+1-\frac{1}{m} \]

对 \(\frac{k-2}{m}\)下取整就得到

\[(i-1)\le \lfloor{\frac{k-2}{m}}\rfloor \le(i-1)\\ 即\lfloor{\frac{k-2}{m}}\rfloor=i-1\\ i=\lfloor{\frac{k-2}{m}}\rfloor +1 \]

标签:结点,le,frac,双亲,编号,顺序存储
From: https://www.cnblogs.com/7shuo/p/17713414.html

相关文章

  • 学习后的顺序表(结点内容只设学号、姓名),表内采用数组,数组0位存放数据,相关的函数均按此
    #include<iostream>#include<string.h>usingnamespacestd;typedefstruct{ intid; stringname;}Node;//结点定义typedefstruct{ Node*element;//基地址(动态长度) intlength;//表长}Linklist;#defineMAXSIZE100//最大长度voidmenu();//声明菜单函数voidCreatelist(Lin......
  • 例2.9 建立一个带头结点的线性链表,用以存放输人的二进制数,链表中每个结点的data域存放
    1.题目例2.9建立一个带头结点的线性链表,用以存放输人的二进制数,链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。2.算法分析3.代码/*二进制加1*/voidBinAdd(LinkListl){inttemp;Node*pa=l->next,*pb,*s;while(pa......
  • 例2.7 算法实现带头结点单链表的就地逆置问题。
    1.题目例2.7算法实现带头结点单链表的就地逆置问题。2.算法思想3.代码//就地逆置voidReverseList(LinkListL){Node*p,*q;p=L->next;L->next=NULL;while(p){q=p->next;p->next=L->next;L->next=p;......
  • 二叉树(顺序存储要维护关系)
                    ......
  • Icoding 链表 删除范围内结点
    题目:已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度。链表结点定义如下:struct_lnklist{ElemTypedata;struct_lnklist*next;};typedefstruct......
  • 2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算
    2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」(编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_skills......
  • 2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算
    2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」(编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_sk......
  • java版本剑指offer:链表中倒数最后k个结点
    java版本剑指offer:链表中倒数最后k个结点描述输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为0的链表。最简单的方式就是使用两个指针,第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针......
  • java剑指offer:两个链表的第一个公共结点
    java剑指offer:两个链表的第一个公共结点描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解题思路:先假设链表A头结点与结点8的长度与链表B头结点与结点8的长度相等,那么就可以用双指针。......
  • Java版剑指offer:链表中环的入口结点
    Java版剑指offer:链表中环的入口结点描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序......