所以我有一个二叉树,我想将每个节点内的值存储在一个数组中。我试图以这种方式解决我的问题,但是,每次使用函数 getAllElements() 时, this.root.arrayOfObj 的大小都会增加。它不应该。或者如果它应该,它应该是因为我在 binaryTree 中添加或删除了一个节点。我试图不使用根中的数组,而是创建一个局部变量,但这样我无法保存树中所有节点的所有对象。
class node {
node left, right;
<T>genericObject;
<T> ArrayList arrayOfObjs = new ArrayList<>();
<T>array_objects[];
node(){
left = null;
right = null;
}
class binarytree {
Node root;
binarytree() {
root = null;
}
public <T>[] getAllElements(Node t) {
this.root.array_objects = null;
if (t == null) {
return this.root.array_objects;
} else {
this.root.arrayOfObjs.add(t.genericObject);
}
getAllElements(t.left);
getAllElements(t.right);
this.root.array_objects = new <T>[t.arrayOfObjs.size()];
for (int i = 0; i < t.arrayOfObjs.size(); i++) {
this.root.array_object[i] = this.root.arrayOfObjs.get(i);
}
return this.root.array_objects;
}
}
这是我对Node
确实为我编译的类的定义。
class Node<T> {
Node<T> left, right;
T genericObject;
}
基于以上,这里是我对 method 的实现getAllElements()
。
public void getAllElements(Node<T> aNode, List<T> list) {
if (aNode == null) {
return;
}
else {
getAllElements(aNode.left, list);
list.add(aNode.genericObject);
getAllElements(aNode.right, list);
}
}
您无法创建通用数组,因此虽然这将编译...
T array_objects[];
这不会:
array_objects = new T[50];
因此,您可以使用List而不是数组,因为您始终可以将 aList
转换为数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句