В вопросе об алгоритме в описании говорится следующее:
/**
* 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; }
Я ценю быстрое принятие. И я тоже согласен: это базовые вещи. И обычно я бы только прокомментировал, но мне нужно было место, чтобы изложить основные моменты.
@GhostCat Я согласен. Я запутался и подумал, что строка - это и тип поля, и имя поля. И изо всех сил пытался выбраться из этого замешательства. Но это здорово, что ты сразу понял, в чем мои мысли.




Вас как будто ослепило форматирование. В комментарии не должно быть первого конструктора. Вместо этого ваш класс может выглядеть так:
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);
}
Другими словами: когда вы создаете свой узел первый, вам нужно только значение, его левый / правый дочерние узлы в этот момент равны нулю. Поэтому вместо двух разных тел конструктора первый конструктор просто вызывает второй конструктор (чтобы избежать дублирования кода).
Благодарность! это отвечает на мой вопрос. Но у вас есть один вопрос для вашего сообщения, вы имеете в виду, что мне не нужен второй конструктор, и только первый конструктор может позаботиться о создании первого узла с нулевым левым и правым, а также добавлением левого / правого узла к этому первому узлу?
Да, это возможно.
это довольно стандартный Java-материал. Изучите сначала основы, прежде чем погружаться в структуру данных / алгоритм