在Leetcode上编码关于二元搜索树的问题时,我的情况如下:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public List<Integer> inorderTraversal (TreeNode root) {
// the variables below are defined by myself.
Stack <TreeNode> stack = new Stack<TreeNode>();
ArrayList<Integer> res = new ArrayList<Integer>();
TreeNode curr = root;
...
}
}
在最后一行中,我定义了TreeNode
并使其等于root
。但如果我写作
TreeNode curr = new TreeNode()
编译器引发错误。我不知道为什么我不能以这种方式将TreeNode
定义为临时变量。
答案 0 :(得分:4)
您的TreeNode
类没有无参构造函数。
由于您已经使用int
参数定义了构造函数,因此编译器不会为您创建默认构造函数。
这样的事情(假设它有意义)将起作用:
TreeNode cust = new TreeNode(someIntValue);
答案 1 :(得分:2)
TreeNode构造函数具有参数int x,因此如果只编写“TreeNode curr = new TreeNode();”,则会出现错误。您需要做的就是为参数添加一个int。
解决方案:“TreeNode curr = new TreeNode(4);”
只需添加任何int值。
答案 2 :(得分:2)
Java允许您使用默认构造函数(没有args的构造函数),以防您未在类中显式创建自己的构造函数。
一旦你创建了自己的构造函数,在你的情况TreeNode(int x) { val = x; }
中你就不能再使用该类的默认构造函数了。