Двоичное дерево - Как удалить элементы; java - PullRequest
0 голосов
/ 13 февраля 2020
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);
}
}

, как указано выше, я Можно просто добавить значения, проблема возникает, когда я пытаюсь их удалить.

1 Ответ

0 голосов
/ 13 февраля 2020

Ваш код должен работать. Возможно, что-то не так с тем, как вы вставляете элементы. Можете ли вы поделиться своим полным кодом?

...