在算法问题中,描述如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
我的问题1:很难理解TreeNode(int x) { val = x; }
是什么,请解释这条线的含义。为什么这是必要的。
我的问题2:如何将TreeNode(int x) { val = x; }
放入构造函数的实际代码中?这是我到目前为止所尝试但却出错:
TreeNode (int val, TreeNode left, TreeNode right, TreeNode x){
this.left = left;
this.right = right;
this.x = { val = x; }
this.val = val;
}
}
错误:第this.x = { val = x; }
行非法开始表达
答案 0 :(得分:1)
你似乎被格式化所蒙蔽。第一个构造函数不应该在注释中。相反,你的课程可能如下所示:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
TreeNode (int val, TreeNode left, TreeNode right){
this.left = left;
this.right = right;
this.val = val;
}
构造函数参数通常分配给您的类的字段。而你只是混淆了(你自己),假设你再次需要那个{ val = x }
片段。但是,剪切的只是第一个构造函数的完整主体。
而且确切地说,实际上你宁愿做类似
的事情 TreeNode(int x) {
this(x, null, null);
}
换句话说:当您创建第一个节点时,您只需要一个值,此时它的左/右子节点为空。因此,第一个构造函数不是使用两个不同的构造函数体,而是简单地调用第二个构造函数(以避免代码重复)。