sift down右孩子比左孩子大的问题

来源:8-4 从堆中取出元素和Sift Down

慕先生2077633

2019-06-23

http://img.mukewang.com/szimg/5d0f8ca700013dee12800720.jpg
波波老师您好,若第二层右侧节点值为42的话,sift down按照孩子节点最大的来选择,是否会导致第三层16的节点没有右孩子,而22的节点有左孩子,这样中间就有一个空的了

写回答

2回答

笨蛋某某某

2019-09-24

节点15在与根节点交换位置后 其右子树中没有增加新的节点 所以不会破坏完全二叉树这个前提 谢谢老师指导

1
0

liuyubobobo

2019-06-24

不会。


我要没理解错,你的意思是如果测试用例是这样:

           52
         /    \
      41       42
    /    \    /  \
  28     16  22   13
 /  \   /
19  17 15


取出最大元素,52出堆。15放到堆顶。变成这样:

           15
         /    \
      41       42
    /    \    /  \
  28     16  22   13
 /  \   
19  17


对15开始下沉,首先,42比41大,向42下沉:

           42
         /    \
      41       15
    /    \    /  \
  28     16  22   13
 /  \   
19  17


继续对15下沉,22比15大,下沉:

           42
         /    \
      41       22
    /    \    /  \
  28     16  15   13
 /  \   
19  17


15已经是叶子节点,下沉结束。


用课程的代码,用你觉得有问题的测试用例,实际测试一下,看看是不是会出现你所想象的问题?如果没有出现,仔细思考一下为什么,自己的思考哪里有问题,哪里想错了或者有遗漏?


进步就发生在这个过程中哦:)


继续加油!:)

1
6
那月真美
回复
liuyubobobo
自己画图模拟了一遍发现没问题,多谢老师
2020-07-16
共6条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程