java - 需要在Java中通过数组来呈现二叉搜索树的节点。我怎么做?

标签 java data-structures binary-tree binary-search-tree

这是我的数据结构类(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/

相关文章:

java - 如何处理 Selenium 中重复使用的元素(重复)

java - 当前一个语句失败时确保语句执行的干净方法

java - 没有XML文件的DOM树数据结构

algorithm - 树排序 : time complexity

java - 如何只打印出 java 中有 5 个元素的数组的前 3 个元素?

java - 将整数转换为 ASCII key 字符串

c - 在这种情况下 malloc 是如何工作的?

c++ - 通过检查是否存在循环来确定二叉树有效性的函数

java - 在 Jenkins 中设置 java 自定义位置

algorithm - 在伪代码中使用动态二维数组或 HashMap ?