早教吧 育儿知识 作业答案 考试题库 百科 知识分享

二叉堆的叶节点在数组中的下标为什么从[n/2]+1开始?《算法导论》里在堆排序那一章有一道证明题如下证明:数组表示存储n个元素的堆时,叶节点的下标分别是[n/2]+1,[n/2]+2,..n(此处[]指取下限[

题目详情
二叉堆的叶节点在数组中的下标为什么从[n/2]+1开始?
《算法导论》里在堆排序那一章有一道证明题如下
证明:数组表示存储n个元素的堆时,叶节点的下标分别是[n/2]+1,[n/2]+2,..n (此处[]指取下限[3/2] = 1)
我的疑问如下:
举例来讲,现在有8个节点,构成了一个二叉堆,
(1)
/ \
(2) (3)
/ \ / \
(4) (5) (6) (7)
/
(8)
即使如算法导论中的惯例,数组下标从1开始,何以见得,leaf node (8)的下标为8,但是按照算法导轮上的这道证明题的结论,叶节点(8)在数组里德下标应该是[n/2]+1= [8/2] + 1 = 5
究竟是怎么回事?是我的理解有偏差吗?
上述二叉堆并没有给出节点的值,括号里的数字是值数组里的index.
▼优质解答
答案和解析
二叉堆一般用数组来表示.如果根节点在数组中的位置是1,第n个位置的子节点分别在2n和 2n+1.因此,第1个位置的子节点在2和3,第2个位置的子节点在4和5.以此类推.这种基于1的数组存储方式便于寻找父节点和子节点.-----------数组表示存储n个元素的堆时,叶节点的下标分别是[n/2]+1,[n/2]+2,..n (此处[]指取下限[3/2] = 1)
是你的理解出了问题:
leaf node (8)的下标为8,按照算法导轮上的这道证明题的结论,有8个节点的二叉堆,在数组里叶节点的下标应该是从 [n/2]+1= [8/2] + 1 = 5 起,一直到 8 .即5~8都是叶节点.
看了 二叉堆的叶节点在数组中的下标...的网友还看了以下:

一个人卖西瓜,第一个人买了这堆西瓜的一半在加上半个西瓜.第二个人买了剩下这堆西瓜的一半.第三个人买了  2020-03-31 …

一个人卖西瓜,第一个人买了这堆西瓜的一半在加上半个西瓜.第二个人买了剩下这堆西瓜的一半.第三个人买了  2020-03-31 …

甲乙两堆煤,甲堆是120吨.乙堆是90吨,两堆卖出同样煤后,剩下甲堆是乙堆是4倍,问各卖出多少吨煤  2020-05-21 …

一个学生用石子摆了如下四堆,按这样摆下去,第九堆共有()粒第一堆有1粒,第二堆有4粒,第三堆有9粒  2020-06-03 …

小猴上山摘桃子,它把摘到的桃子平均分成5堆,4堆送给它的好朋友,自己留下一堆,后来它又把留下的一堆  2020-06-25 …

有三堆棋子,棋子的数量分别是3枚,4枚和5枚.甲,乙两人按如下规则轮流进行操作:每人每次取光一堆棋  2020-06-25 …

排列组合问题关于平均分配的10本不同的书分成5堆每对2本有几种分法?式子是C10取2乘C8取2乘C  2020-07-09 …

小玲用棋子摆了如下四堆,弟一堆一个,弟二堆四个,弟三堆九个,弟四堆16个,照这到弟九堆需要多少棋子  2020-07-10 …

1.学校有两个电脑小组,第一小组的人数是第二小组的2倍,如果从第一小组调8人到第二小组,那么两组人  2020-07-15 …

一些圆木按下面的方式堆放,第一堆一根,第二堆3根,第三堆6根,第四堆10根如果按这样堆放下去,那么,  2020-12-30 …