[英]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.