这是我的数据结构类(class)的家庭作业,它是用 Java 编写的。
我必须制作这个小游戏;世界由一个图组成,一些节点保存着项目,当找到这些项目时,这些项目将被添加到用户的库存中,这是一个二叉搜索树。 (它必须是二叉搜索树,否则这会容易得多。)我已经弄清楚了大部分内容,但我需要用户能够查看和访问库存树的内容。我提供的二叉树节点类有一个 inorderPrint()
方法,该方法使用递归来打印所有内容,但这仅有助于向他们显示内容,而不是为他们提供访问它们的简单方法。我想要一个返回二叉搜索树节点数组的方法,这样我就可以在 main 中执行类似的操作...
int i = 0;
int choice;
System.out.println("# - Item\tPoints"); //Will appear as # - Item Points
for (BTNode node : inventory.treeAsArray()) {
System.out.printf("%d - %s\t%d\n", i, node.getData().getName(),
node.getData().getPoints()); //example: 1 - Poo 100
i++;
}
System.out.println("Select the number of the item you want to remove: ");
choice = keyboard.nextInt();
然后我会再次循环遍历数组并删除与用户输入的数字相对应的项目。不过,我不知道如何编写一个以数组形式返回二叉搜索树内容的方法。这是我的主要问题。我在教科书中找不到真正的算法。
最佳答案
如果我这样做,我可能只会按顺序将一个数组传递给所有节点。
public ArrayList<BTNode> treeAsArray() {
ArrayList<BTNode> list = new ArrayList<BTNode>();
root.buildListInorder(list);
return list;
}
然后就有了
private void buildListInorder(ArrayList<BTNode> list) {
buildListInorder(this.left);
list.add(this);
buildListInorder(this.right);
}
您需要添加适当的检查,但这是所需代码的基本轮廓。
关于java - 需要在Java中通过数组来呈现二叉搜索树的节点。我怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468659/