Написание разборчивого кода облегчает обнаружение ошибок - как вами, так и другими.Первым шагом является выбор более выразительных имен переменных, чем temp
, temp2
и treeTemp
.
Кроме того, на самом деле нет необходимости делать new Integer(x)
для назначения параметра метода типа int
.Простое написание x
вместо этого имеет тот же эффект, быстрее во время выполнения и облегчает определение кода, который имеет значение.
Что касается ошибок, первое, что я вижу:
TreeNode temp2 = new TreeNode(temp.getRight().getValue());
Это создает копию TreeNode.Изменение этой копии не повлияет на исходный узел.Кроме того, копия, вероятно, не имеет установленного left
или right
, поскольку вы только передаете value
в конструктор.Интересно, почему вы думаете, что вам нужна копия?В конце концов, вы тоже не создаете его здесь:
deleteNode(new Integer(x), temp.getRight())
Далее, как указывает Sashwat, если удаляемый узел имеет менее 2 дочерних элементов, ваш код ничего не делает, так как ни один изусловия в deleteNode
совпадают.