Data structures 关于二进制堆数据结构的几个问题
我一直在不同的网站和书籍上阅读,我有一些问题需要澄清 1:父节点的优先级是否总是高于其任一子节点的优先级 2:左同胞的优先级是否总是低于右同胞的优先级 3:每个关卡都满了吗,除了可能是最上面的关卡,它是正确加载的Data structures 关于二进制堆数据结构的几个问题,data-structures,Data Structures,我一直在不同的网站和书籍上阅读,我有一些问题需要澄清 1:父节点的优先级是否总是高于其任一子节点的优先级 2:左同胞的优先级是否总是低于右同胞的优先级 3:每个关卡都满了吗,除了可能是最上面的关卡,它是正确加载的 4:每个级别都已满,但底部级别可能未加载。在了解堆之前,您应该了解完全二叉树(CBT)和几乎完全二叉树(ACBT)的定义 CBT和ACBT 完全二叉树:完全二叉树是一棵树,其中除叶子外的每个节点都有两个子节点 几乎完整的二叉树:在每个节点的给定二叉树中: 填充左子项后,只填充右子项。
4:每个级别都已满,但底部级别可能未加载。在了解堆之前,您应该了解完全二叉树(CBT)和几乎完全二叉树(ACBT)的定义 CBT和ACBT 完全二叉树:完全二叉树是一棵树,其中除叶子外的每个节点都有两个子节点 几乎完整的二叉树:在每个节点的给定二叉树中:
有一种方法可以帮助您更好地了解堆。在了解堆之前,您应该了解完全二叉树(CBT)和几乎完全二叉树(ACBT)的定义 CBT和ACBT 完全二叉树:完全二叉树是一棵树,其中除叶子外的每个节点都有两个子节点 几乎完整的二叉树:在每个节点的给定二叉树中:
- 形状属性:二叉堆是一个完整的二叉树;也就是说,除了最后一个(最深的)之外,树的所有级别都被完全填充,如果树的最后一个级别不完整,则该级别的节点从左到右填充
- Heap属性:每个节点中存储的密钥大于或等于(≥) 或小于或等于(≤) 节点子节点中的键,按照总顺序排列
3 3
/ \ / \
2 1 1 2
在维护Shape属性的同时,试图维护左、右子元素的顺序是一件愚蠢的事情。这是可以做到的,但要付出极大的效率代价
对于问题3和问题4,请参见上面关于形状属性的讨论。特别是
3:每个关卡都满了吗,除了可能是最上面的关卡,它是正确加载的
没有
4:每一层都满了吗,除了可能是底部的层,它是左载的