【问题标题】:Need explanation of java class constructor for tree需要解释树的java类构造函数
【发布时间】:2018-05-20 17:45:51
【问题描述】:

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

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

【问题讨论】:

  • 这是非常标准的 java 东西。在深入研究数据结构/算法之前先学习基础
  • 感谢您的快速接受。我也同意:这是基本的东西。通常我只会发表评论,但我需要空间来了解核心观点。
  • @GhostCat 我同意。我很困惑,并认为该行也是字段类型和字段名称。并努力摆脱这种混乱。但很高兴你立即明白我的想法在哪里

标签: java tree nodes


【解决方案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 } sn-p。但这只是第一个构造函数的完整主体。

准确地说,实际上你更愿意做类似的事情

  TreeNode(int x) { 
    this(x, null, null); 
  }

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

【讨论】:

  • 谢谢!这回答了我的问题。但是你的帖子有一个问题,你的意思是我不需要第二个构造函数,只有第一个构造函数可以处理创建左右为空的第一个节点,并将左/右节点添加到第一个节点?
  • 是的,这是可能的。
猜你喜欢
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 2013-10-25
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多