【问题标题】:How to store values in an array, traversing the tree?如何将值存储在数组中,遍历树?
【发布时间】:2021-01-18 05:12:18
【问题描述】:

所以我有一个二叉树,我想将每个节点内的值存储在一个数组中。我试图以这种方式解决我的问题,但是,每次使用函数 getAllElements() 时,this.root.arrayOfObj 的大小都会增加。它不应该。或者如果应该,应该是因为我在二叉树中添加或删除了一个节点。我尝试不使用根中的数组,而是创建一个局部变量,但这样我无法保存树中所有节点的所有对象。

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;
    }

}

【问题讨论】:

  • @Abra(这不是真正的代码,但与我正在处理的代码相似),类节点还有左侧和右侧为空的构造函数。
  • @Abra,因为我没有正确检查。正如我所说,这不是真正的代码,它是我的真实代码的通用形式。
  • @Abra 我试过了,但它不起作用。因为我没有使用函数 getAllElements 返回整数值。我正在返回一个 数组 []; (另外我在编译时遇到问题,它没有编译)。

标签: java arrays recursion binary-tree


【解决方案1】:

这是我为我编译的类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 转换为数组。

【讨论】:

  • 感谢您的更正,但我认为该节点不需要具有该类型。在我的实现中,只是节点,具有左、右节点和数组、arraylist 和 genericObject。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多