数据结构 树 思考题 5

题目1:有个堆其元素在数组中的序列为:58,25,44,18,10,26,20,12。如果调用DeleteMax函数删除最大值元素,请猜猜看:程序中的for循环刚退出时变量parent的值是多少?

数据结构 树 思考题 5

数据结构 树 思考题 5

首先child = 2,然后判断坐标为2的和Child+1=3的谁大,这里44大,所以child=3

然后后面的都不成立,因为12小于44,我们让坐标为1的根节点值为44。

然后再进行迭代,一直往下走,最后结果为6。

其实我们只需要知道最后把12填充到哪个格子里就好了。

题目2:建堆时,最坏情况下需要挪动元素次数是等于树中各结点的高度和。问:对于元素个数为12的堆,其各结点的高度之和是多少?

数据结构 树 思考题 5

0+2*1+4*2 = 10

题目3:下列序列中哪个是最小堆?

  • A.: 2, 55, 52, 72, 28, 98, 71

  • B. 2, 28, 71, 72, 55, 98, 52 

  • C. 2, 28, 52, 72, 55, 98, 71

  • D. 28, 2, 71, 72, 55, 98, 52

A不是,因为第2个和第5个相比,28<55

B不是,最后面的52小于父节点的71

C是

D不是,子节点2小于其父节点28

题目4::在最大堆 {97,76,65,50,49,13,27}中插入83后,该最大堆为:

  • A. {97,76,65,83,49,13,27,50}

  • B. {97,83,65,76,49,13,27,50}

  • C. {97,83,65,76,50,13,27,49}

  • D. {97,83,65,76,49,50,13,27}

插入先放到最后面,查看树的关系:97—76,65    76—50,49    65—13,27

所以新加入的83挂在50下面,然后跟50对调。

所以最后一个数一定是50.而且第二个数一定是83(因为是从根节点的左树向上替换的,所以不会是第三个数)现在排除选项A和选项C和D。

最后选B。

题目5:对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的:

  • A. 二叉搜索树(查找树)高度大于等于最小堆高度

  • B. 对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列

  • C. 从最小堆根节点到其任何叶结点的路径上的结点值构成从小到大的序列

  • D. 对该最小堆进行按层序(level order)遍历可得到从小到大的序列

A正确,因为最小堆一定是完全二叉树,同样节点数量时高度最小。

B正确,我们由定义可以知道,该树一定是左子节点大于当前节点大于右子节点,比如如下这样的树:

数据结构 树 思考题 5

C符合最小堆的定义

D错误。不一定是从小到大,可能中间有乱序。