如果我将项目:10,12,14,1,6插入到二进制最小堆中,一个接一个的项目结果如何,我的问题是以下
当我开始时我有:
10
然后
10
/
12
然后
10
/ \
12 14
然后
1
/ \
10 14
/
12
但这不对,那么正确的做法是什么?
注意:这是一个家庭作业问题,我试图理解这个概念,如果你觉得不能解决问题(这不是完整的问题)请提供一个类似问题的例子。
答案 0 :(得分:18)
你必须将新元素作为子元素(或者确切地说是叶子)添加到堆中(而不是作为根),这意味着你将它放在第一个“正确”的空闲点(或者在你的堆数组中,只是在结束)。
然后你必须重新建立堆条件,这称为“heapify”。这分两个阶段发生:
这意味着
10
/ \
12 14
+ 1导致
10
/ \
12 14
/
1
这违反了堆条件,所以你必须堆积
10
/ \
1 14
/
12
但这仍然不对,所以你必须再次堆积
1
/ \
10 14
/
12
你现在......现在一切都好了: - )
答案 1 :(得分:2)
step1: 10
step2: 10
/
12
step3: 10
/ \
12 14
step4: 1
/ \
10 12
/
14
step5: 1
/ \
6 10
/ \
12 14