堆的
PHP实现真的是一个完整的实现吗?
当我读到这篇文章,http://en.wikipedia.org/wiki/Heap_%28data_structure%29时,我认为子节点有一个特定的父节点,而父节点有特定的子节点.
当我查看PHP文档中的示例(http://au.php.net/manual/en/class.splheap.php)时,似乎子节点都共享相同的“级别”,但特定的父/子信息并不重要.
例如,哪个节点是PHP示例中排名第10的三个节点中的每个节点的父节点?
在我的应用程序中,当用户选择“节点156”时,我需要知道它的孩子是谁,这样我每次访问都可以支付. (我可以使他们的身份’节点1561′,’节点1562’等,所以这种关系很明显).
PHP堆实现是否不完整?我应该忘记Spl课程并走自己的路吗?或者我错过了关于堆应该如何运作的一些信息?或许我应该看一下特定的堆变体?
谢谢堆!
此堆实现的API不允许数组访问,这是您在这种情况下所需的.堆通常用于实现其他结构,使您可以轻松地从顶部删除项目.
您可以创建一个包装器迭代器来寻找您需要的位置.我怀疑这将是一个表现不佳的解决方案而不是一个非常好的解决方案.
在这种情况下,BinaryTree是我认为你需要的.鉴于树中有一个位置,你可以把它放在它的孩子身上,因为它们是直接相关的.我确实有一个BinarySearchTree将保持树的顺序,你可以调用getRoot来获取BinaryTree的副本.还有一个AvlTree,它将保持树的平衡,以便进行最佳搜索.