Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.01 KB | None | 0 0
  1. private void Balance(INode<T,V> node) {
  2.         if(node==root)
  3.             node.setColor(false);
  4.         else
  5.             node.setColor(true);
  6.         if((node!=root) && node.getParent().getColor()){
  7.             if(node.getParent() == node.getParent().getParent().getLeftChild()){
  8.                   if(node.getParent().getParent().getRightChild().getColor())
  9.                     RedUncle(node);
  10.                   else if(!node.getParent().getParent().getRightChild().getColor())
  11.                       BlackUncle(node);
  12.             }else if(node.getParent() == node.getParent().getParent().getRightChild()){
  13.                   if(node.getParent().getParent().getLeftChild().getColor())
  14.                       RedUncle(node);
  15.                   else if(!node.getParent().getParent().getRightChild().getColor())
  16.                       BlackUncle(node);
  17.             }
  18.         }
  19.     }
  20.     private void RedUncle(INode<T,V> node){
  21.         if(node.getParent()==null)
  22.              return;
  23.         if(node.getParent().getParent()==null)
  24.             return;
  25.         if(node==root)
  26.             node.setColor(false);
  27.         if(node.getParent() == node.getParent().getParent().getLeftChild()){
  28.             if(node.getParent().getParent().getRightChild().getColor()) {
  29.                 node.getParent().setColor(false);
  30.                 node.getParent().getParent().getRightChild().setColor(false);
  31.                 node.getParent().getParent().setColor(true);
  32.             }
  33.         }else if(node.getParent() == node.getParent().getParent().getRightChild()){
  34.             if(node.getParent().getParent().getLeftChild().getColor()) {
  35.                 node.getParent().setColor(false);
  36.                 node.getParent().getParent().getLeftChild().setColor(false);
  37.                 node.getParent().getParent().setColor(true);
  38.             }
  39.         }
  40.         node=node.getParent().getParent();
  41.     }
  42.     private void BlackUncle(INode<T,V> node){
  43.         if(node.getParent()==null)
  44.             return;
  45.         if(node.getParent().getParent()==null)
  46.             return;
  47.        if((node==node.getParent().getLeftChild())
  48.        && (node.getParent()==node.getParent().getParent().getLeftChild())){
  49.            INode<T,V> temp=node.getParent().getRightChild();
  50.            INode<T,V> grandparent=node.getParent().getParent();
  51.            if(grandparent.getParent()==null)
  52.                node.getParent().setParent(root);
  53.            else
  54.                node.getParent().setParent(grandparent.getParent());
  55.            node.getParent().setRightChild(grandparent);
  56.            node.getParent().getRightChild().setLeftChild(temp);
  57.            node.setColor(true);
  58.            node.getParent().setColor(false);
  59.            node.getParent().getRightChild().setColor(true);
  60.        }else if((node==node.getParent().getRightChild()
  61.        && (node.getParent()==node.getParent().getParent().getLeftChild()))){
  62.            LeftRotate(node.getParent());
  63.            INode<T,V> first=node.getLeftChild();
  64.            INode<T,V> temp=first.getParent().getRightChild();
  65.            INode<T,V> grandparent=first.getParent().getParent();
  66.            if(grandparent.getParent()==null)
  67.                first.getParent().setParent(root);
  68.            else
  69.                first.getParent().setParent(grandparent.getParent());
  70.            first.getParent().setRightChild(grandparent);
  71.            first.getParent().getRightChild().setLeftChild(temp);
  72.            first.setColor(true);
  73.            first.getParent().setColor(false);
  74.            first.getParent().getRightChild().setColor(true);
  75.        }else if((node==node.getParent().getRightChild())
  76.                && (node.getParent()==node.getParent().getParent().getRightChild())){
  77.            INode<T,V> temp=node.getParent().getLeftChild();
  78.            INode<T,V> grandparent=node.getParent().getParent();
  79.            if(grandparent.getParent()==null)
  80.                node.getParent().setParent(root);
  81.            else
  82.                node.getParent().setParent(grandparent.getParent());
  83.            node.getParent().setLeftChild(grandparent);
  84.            node.getParent().getLeftChild().setRightChild(temp);
  85.            node.setColor(true);
  86.            node.getParent().setColor(false);
  87.            node.getParent().getLeftChild().setColor(true);
  88.        }else if((node==node.getParent().getLeftChild()
  89.                && (node.getParent()==node.getParent().getParent().getRightChild()))){
  90.            RightRotate(node.getParent());
  91.            INode<T,V> first=node.getRightChild();
  92.            INode<T,V> temp=first.getParent().getLeftChild();
  93.            INode<T,V> grandparent=first.getParent().getParent();
  94.            if(grandparent.getParent()==null)
  95.                first.getParent().setParent(root);
  96.            else
  97.                first.getParent().setParent(grandparent.getParent());
  98.            first.getParent().setLeftChild(grandparent);
  99.            first.getParent().getLeftChild().setRightChild(temp);
  100.            first.setColor(true);
  101.            first.getParent().setColor(false);
  102.            first.getParent().getLeftChild().setColor(true);
  103.        }
  104.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement