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

用户14360885

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章