需要解释树的java类构造函数

时间:2018-05-20 17:45:51

标签: java tree nodes

在算法问题中,描述如下:

/**
 * 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; }行非法开始表达

1 个答案:

答案 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); 
  }

换句话说:当您创建第一个节点时,您只需要一个值,此时它的左/右子节点为空。因此,第一个构造函数不是使用两个不同的构造函数体,而是简单地调用第二个构造函数(以避免代码重复)。