首先,这个问题不是家庭作业。我目前正在阅读 Robert Lafore 的《Data Structures and Algorithms 2nd Edition》一书。在第 10 章中,我们学习了 2-3-4 树,然后被要求编写一个方法来找到该树中的最小值。
从概念的角度来看,我了解最小值在哪里。它只是叶子中最左边的数据项。
从编程的角度来看,我对如何实现查找此数据项的方法有点困惑。我有一个布尔值,可以判断节点是否是叶子。所以我最初做的是这样的:
public long minValue() {
Node curNode = root; // current node = root
long min = curNode.getMin();
while(!curNode.isLeaf()) { // while current node is NOT a leaf
curNode = getNextChild(curNode, min);
} // end while
return min;
} // end minValue()
这是做什么的(至少我认为它应该做的,是创建一个从根节点开始的 curNode。然后创建一个存储 curNode.getMin 的最小值。getMin() 只获取索引 0 处数组的值(其中应该保持最小值)。然后,当当前节点不是叶子时,我们应该从最小值点遍历到下一个孩子。一旦当前节点是叶子,它应该返回最小值。
但这不起作用。有谁知道如何实现这一点?提示或建议或其他任何东西?
编辑:要查看每个类以及它们如何交互,这里是每个单独类的链接。我把最小值方法放在我的 Tree234 类中
DataItem、Node、Tree234以及运行程序的位置Tree234App