我正在尝试实现二叉搜索树。但我不明白它们将如何存储在数组中。这是我将其存储在的数据结构:
private Comparable[] intHeap;
我仍然不确定如何使用可比较的,请有人解释一下这个数据结构的使用吗?
我如何检查二叉搜索树的最大和最小元素?
如果我有以下树,它会被存储在intHeap中1,3,4,6,7,8,10,13,14吗?
如果有多个节点级别,您如何知道下一个节点?
提前谢谢。
答案 0 :(得分:1)
从数组的声明来看,你正在构建的是binary heap - 一种专门的基于树的数据结构,通常存储在一个数组中。与依赖于显式引用的树结构不同,堆依赖于一种聪明的索引方案,即"包装"树形成线性数据结构。
Comparable
接口允许您构建一个可以存储任意类数据的堆,只要它们实现Comparable
接口即可。这很有用,因为您可以构建可重用的代码,该代码适用于您自己类型的数字,字符串或对象。
如果有多个节点级别,您如何知道下一个节点?
如果节点位于索引n
,则其两个子节点位于索引2n + 1和2n + 2处。如果您位于索引k
并且您想要跟随左子树,设置k = 2*k+1
;如果要关注正确的子树,请设置k = 2*k+2
。继续使用相同的算法,直到您点击null
数组中的intHeap
元素。
答案 1 :(得分:0)
你需要通过一个很好的教程。只是为了让你抬头,节点将是这样的
Class Node
{
int data;//ideally should be generic.
Node leftChild;
Node rightChild;
...
}