Red Black Tree исправление после вставки, необычная реализация
Я работаю над проектом для класса, работающего с красно-черными деревьями, и реализация моего профессора немного странная. Мне удалось получить рекурсивную функцию вставки, с которой у меня были проблемы (см. Этот вопрос: необычная реализация Java вставки узлов красного / черного дерева)
Но теперь, что касается поворота вправо, влево и переключения, код не работает. Скажем, я ввожу 10, 8, 4. 10 и 8 появятся в графическом интерфейсе, а 4 - нет. Отладка показывает "ROTATING RIGHT", как и должно быть, но узлы не меняются в графическом интерфейсе. Мой код ниже. Я хотел бы знать, если это проблема с моим методом handleInsertion(), или это как-то связано с GUI моего профессора.
public boolean insertNode(Node node) {
if(root==null){
root=node;
root.setColor(Node.BLACK);
return true;
}
else
node.setColor(Node.RED);
return insertNode(node, root);
}
public boolean insertNode(Node node, Node cur){
if(node.getValue()<cur.getValue()){
if(cur.getLeft()!=null)
return insertNode(node, cur.getLeft());
else{
cur.setLeft(node);
node.setParent(cur);
handleInsertion(node);
return true; } }
else if(node.getValue()>cur.getValue()){
if(cur.getRight()!=null)
return insertNode(node, cur.getRight());
else{
cur.setRight(node);
node.setParent(cur);
handleInsertion(node);
return true; } }
else
return false;
}
private static void handleInsertion(Node n){
Node F;
if(n.getParent()==null)
return;
else{
n=n.getParent();
F=n; }
if (exists(n.getRight())&&exists(n.getLeft())&&isRed(n.getRight()) && !isRed(n.getLeft())) n = rotateLeft(n);
if(n.getParent()!=null) n=n.getParent();
if (exists(n.getLeft())&&exists(n.getLeft().getLeft())&&isRed(n.getLeft()) && isRed(n.getLeft().getLeft())) n = rotateRight(n.getLeft());
n=F;
if (exists(n.getLeft())&&exists(n.getRight())&&isRed(n.getLeft()) && isRed(n.getRight())) flipColors(n);
}
Я также пытался использовать реализации с оператором while и узлом дяди, но они вызывали исключения NullPointerException довольно часто и в основном давали одинаковые результаты.
Спасибо!