我目前正在学习数据结构并尝试实现BST和max-heap(使用BST作为基类)。但我偶然发现从BST派生堆似乎是不可能的。几乎所有的堆实现都是基于数组,而不是使用指向左右的指针,而大多数BST都是基于指针而不是数组。
所以我的问题是为什么我必须使用数组来实现堆?并且,在实现BST时,为什么人们选择使用指针指向左右阵列呢?我知道使用数组来实现BST可能会花费更多的空间,并且实现删除功能更难,还有其他原因吗?
非常感谢你!
答案 0 :(得分:2)
使用数组完成二进制堆的标准实现的主要原因是,因为堆是完整的二叉树。
因为完整的二叉树总是逐级增长(含义:首先,父级别将填充节点,然后才填充子级别)。
因此,我们可以使用数组,对于位置i
的节点,左侧子节点位于2*i
,右侧子节点位于2*i+1
位置。
使用指针而不是使用数组实现二进制搜索树的原因是因为二进制搜索树不能保证是完整的二叉树