繁体   English   中英

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

[英]Need to present the nodes of a binary search tree through an array in Java. How do I do that?

这是我的Data Structures类的作业,并且使用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);
}

您将需要添加适当的检查,但这是所需代码的基本概述。

public List<BTNode> treeAsArray() {
     return treeAsArray(this.root, new ArrayList<BTNode>());
}

private List<BTNode> treeAsArray(BTNode root, List<BTNode> array) {
     if (root == null)
         return array;

     treeAsArray(root->getLeftNode(), array);
     array.add(root);
     treeAsArray(root->getRightNode(), array);

     return array;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM