如何将值存储在数组中,遍历树?

How to store values in an array, traversing the tree?

所以我有一个 binaryTree,我想将每个节点内的值存储在一个数组中。我试图以这种方式解决我的问题,但是,每次使用函数 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;
    }

}

这是我对 class Node 的定义,它确实为我编译了。

class Node<T> {
    Node<T> left, right;
    T genericObject;
}

基于以上,这里是我实现的方法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 而不是数组,因为您始终可以将 List 转换为数组。