Нужно объяснение конструктора класса Java для дерева - PullRequest
0 голосов
/ 20 мая 2018

В вопросе об алгоритме в описании говорится следующее:

/**
 * 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 голосов
/ 20 мая 2018

Вы, кажется, ослеплены форматированием.Первый конструктор не должен быть в комментарии.Вместо этого ваш класс может выглядеть так:

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

Другими словами: когда вы создаете свой первый узел, тогда вам нужен толькозначение, его левый / правый дочерние узлы в этом месте нулевые.Поэтому вместо двух разных конструкторов первый конструктор просто вызывает второй конструктор (чтобы избежать дублирования кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...