【问题标题】:why I can't add int type value to an array为什么我不能将 int 类型值添加到数组中
【发布时间】:2019-12-12 04:13:56
【问题描述】:
import java.util.ArrayList;
import java.util.Collection;


public class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode(int x){val=x;}
}

public class SortedArrayToBalancedBST {

  public TreeNode sortedArrayToBST(int[] nums) {
        if(nums.length==0) return null;
        else return sortedArrayToBST(nums, 0, nums.length-1);
    }
    public TreeNode sortedArrayToBST(int[] nums, int left, int right){
        ArrayList<TreeNode> list = New ArrayList<TreeNode>()
        TreeNode root =null;
        int mid=(right+left)/2;
        if(right>=left){
            root= new TreeNode(nums[mid]);
            root.left=sortedArrayToBST(nums, left, mid-1);
            root.right=sortedArrayToBST(nums, mid+1, right);
            list.add(root);
            //System.out.print(list);
        }
        if(left>right) return null;
        return root;

    }

    public static void main(String[] args) {
        int nums[]= {1,3,5,7,9};
        SortedArrayToBalancedBST s = new SortedArrayToBalancedBST();
        s.sortedArrayToBST(nums);
        System.out.print(s.toString())
    }

我想使用上面的代码创建一个平衡树。但是java返回一个错误告诉我:不能在数组类型int[]上调用add(TreeNode),那我该怎么办,为什么我不能将int类型的值添加到数组中?如果我是对的,我还希望输出看起来像 [5,3,7,1,null,null,9]。

【问题讨论】:

  • 您不能将 TreeNode 类型的对象添加到整数数组中。它必须是 TreeNode[] arr = new TreeNode[5] 并且您通过提供类似 arr[0] = new TreeNode(5) 的索引将对象插入到数组中
  • 您的构造函数将 int 作为参数 TreeNode(int x){val=x;} 而您使用数组 root= new TreeNode(nums[mid]) 对其进行初始化

标签: java arrays algorithm binary-search-tree treenode


【解决方案1】:

数组类型没有add(...) 方法。您必须指定要替换元素的索引(即arr[0] = 1;)。此外,如果您的数组将包含空值,请考虑使用 Integer[] 类型而不是原语。

【讨论】:

  • 感谢您的回复先生,它已经是一种递归方法,所以我不知道如何为这些值分配索引。我尝试创建数组的原因是,当我使用 system.out.print(root) 时,程序会返回如下结果:TreeNode@15db9742TreeNode@6d06d69cTreeNode@7852e922TreeNode@4e25154fTreeNode@70dea4eTreeNode@15db9742TreeNode@6d06d69cTreeNode@7852e922TreeNode@4e25154fTreeNode@4e25154fTreeNode @70dea4e
  • 在这种情况下,请使用 ArrayList 而不是数组。如果要打印对象的内容,则必须覆盖 TreeNode 类的 toString() 方法以返回要打印的内容。否则,它只会打印随机哈希码值
  • 您好,先生,您还在吗?现在我使用 list 来存储我的值,这很好,但是如何覆盖 toString 方法。我在谷歌上搜索了大约一个小时,但没有找到任何与我相关的例子。我确实记得在 leetcode 实践中使用过 toString() 函数,但我真的不知道如何自己构建一个 toString 方法。
  • 如果您只想打印 TreeNode 的值,请在 TreeNode 类中添加函数:@Override public String toString() { return String.valueOf(val); }。否则,将其格式化为包含左右节点值。
  • 仍然有一个错误,它说不能从 int 转换为 string。然后我添加这个:@Override public int toString() { return val; },它说返回类型与 object.toString() 不兼容
猜你喜欢
  • 2016-05-14
  • 2020-12-02
  • 2019-03-11
  • 2012-12-30
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
相关资源
最近更新 更多