node root=null;
public node delete(node node, int val) {
if(node == null) {
return node;
}
if(val < node.value) {
node.left= delete(node.left, val);
} else if(val > node.value) {
node.right= delete(node.right, val);
} else {
if(node.left== null || node.right== null) {
node temp = node.left!= null ? node.left: node.right;
if(temp == null) {
return null;
} else {
return temp;
}
} else {
node next = getSuccessor(node);
node.value= next.value;
node.right= delete(node.right, next.value);
return node;
}
}
return node;
}
public node getSuccessor(node node) {
if(node == null) {
return null;
}
node temp = node.right;
while(temp.left!= null) {
temp = temp.left;
}
return temp;
}
это мой код и это класс для узлов:
public class node {
int value;
node left;
node right;
}
У меня уже есть рабочий код для добавления значений. проблема в том, что когда я добавляю значения и пытаюсь удалить некоторые из них с помощью кода, который я только что написал здесь, это не работает. это то, что я помещаю в основной класс, когда пытаюсь удалить значение:
binarytree tree= new binarytree;
node root=null;
root=tree.delete(root,4);
Кто-нибудь знает, что может быть не так? я пропускаю функцию, которая ссылается на удаление одного или что-то подобное? пожалуйста, обратите внимание, что я новичок в java, поэтому, если вы хотите помочь мне относиться ко мне как к новичку, я был бы очень признателен, если бы кто-то мог помочь мне заставить мою функцию удаления работать, потому что теперь она вообще ничего не делает ...
РЕДАКТИРОВАТЬ:
Код для добавления значений:
void recadd(node a, int val) {
if (val<a.value) {
if (a.left==null){
a.left=new node (val);
}
}
else
{
if(a.right==null) {
a.right=new node(val);
}
else {
recadd(a.right, val);
}
}
}
код, который я использую для вызова функции добавления:
void add(int val){
node k = new node (val);
if (root==null)
{
root = k;
}
else
{
recadd(root, val);
}
}
, как указано выше, я Можно просто добавить значения, проблема возникает, когда я пытаюсь их удалить.