这是一个uni项目,我们编写一个“生命之树”来编写问题,然后用自己的答案填充自己,作为二叉树,它有“漏洞”,所以基本上它可以有一些数据在索引20但不在15上,所以.size()也不会起作用
这给了我一些问题,因为我需要知道某个索引是否为null,但如果找不到任何内容,ArrayList.get将返回IndexOutOfBoundsException(如文档所述)
if(tree.get(next) == null){
String nName = getInput();
String nCarac = getInput(nName,nome);
tree.add(next,nCarac);
tree.add(next+Math.pow(2,height), nName);
restart();
}else{
question(next,height);
}
解决这个问题的方法是什么?
它不是“常规”二叉树,它的外观如下:
o
/ \
o o
| |
o o
/ \ / \
o oo o
答案 0 :(得分:1)
好吧,您似乎正在尝试在数组中尚不存在的位置添加值。在超出范围的索引之后添加值是不可能的 -
tree.add(next+Math.pow(2,height), nName);
可能已经超出界限。
我认为你应该考虑另一种数据结构。就像你说的:一棵树。而不是使树成为ArrayList<>,你应该有一个
class TreeNode{
ArrayList children = new ArrayList<TreeNode>();
...Some other properties like "nName" and nome ...
}
创建树,您可以拥有根节点并连续添加子节点 - 例如:
TreeNode root = new TreeNode();
TreeNode childLevel1 = new TreeNode();
root.children.add(childLevel1);
TreeNode childLevel2 = new TreeNode();
childLevel1.children.add(childLevel2);
它给出了两层深度的树,每层有一个节点。
root
|
childLevel1
|
childLevel2