java – 使用二叉树实现堆

前端之家收集整理的这篇文章主要介绍了java – 使用二叉树实现堆前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Stack Exchange中已经提出了这个问题,但没有得到答复.

链接到先前提出的问题:
Binary Heap Implemented via a Binary Tree Structure

如何在二叉树中实现堆.要实现堆,了解最后一个填充节点和第一个未占用节点很重要.这可以在树的级别排序中完成,但是时间复杂度将是O(n),只是为了找到第一个未占用的节点.那么,如何在O(logn)中的二叉树中实现堆?

谢谢
谢卡尔

解决方法

要实现具有O(log n)时间复杂度的二叉树的堆,需要将总数作为实例变量存储.

假设我们有一堆10个总节点.

如果我们要添加一个节点…

我们将节点总数递增1.现在我们有11个总节点.我们将新的总数(11)转换为二进制表示:1011.

使用总节点(1011)的二进制表示,我们摆脱第一个数字.之后,我们用011来浏览树到下一个插入节点的位置,0表示向左移,1表示右移.因此,在011的时候,我们会去左边,右边,这样我们就可以进入下一个位置.

我们检查每个级别的一个节点,使得时间复杂度O(log n)

猜你在找的Java相关文章