如果我在节点6下插入一个新节点,树仍然是一个小堆?
答案 0 :(得分:1)
如果要插入的值至少为6,那么是的,它仍然是最小堆。如果该值小于6,则不会是最小堆。
但是,大多数堆插入算法总是在最初插入值,即在树的最低级别的下一个可用位置,或新级别的第一个,最左侧位置,如果等级已经满了。然后插入过程将继续交换值,直到值为bubbled up到min-heap属性再次有效的位置。
答案 1 :(得分:1)
在向Heap添加每个新元素之后,需要将该元素接收到根或其当前级别之上的任何特定级别,直到它下面的所有节点都大于它。
阅读评论后 : 默认情况下,堆是一个完整的二叉树,据我所知,您可能正在谈论完整的二叉树。
答案 2 :(得分:0)
关于binary heap的维基百科文章说:
二进制堆被定义为具有两个附加树的二叉树 约束:[3]
- Shape属性:二进制堆是一个完整的二叉树;也就是说,除了最后一个(最深)之外,树的所有级别都是 完全填充,如果树的最后一级没有完成,那么 该级别的节点从左到右填充。
- 堆属性:存储在每个节点中的密钥大于或等于(≥)或小于或等于(≤)节点中的密钥 孩子们,根据一些总订单。
如果堆不能是一个完整的二叉树,那么就不可能有一个带有单个项的堆。因为具有一个节点的二叉树是完整的二叉树。
二进制堆的最后一级无法完成的想法是错误的。如果存在这种限制,数学就无法解决。
答案 3 :(得分:0)
这是最小堆:
此树的所有根节点都小于其子节点。
它称为“几乎完整的二进制树” :
在这棵树(节点= 6)中没有两个子树,这就是为什么我们不能称呼此完整的二叉树的原因。
堆可以是完整的二叉树或几乎完整的二叉树。
如果添加一个数字,然后添加数字> 6,则它将成为完整的二叉树。
谢谢。