Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void Balance(INode<T,V> node) {
- if(node==root)
- node.setColor(false);
- else
- node.setColor(true);
- if((node!=root) && node.getParent().getColor()){
- if(node.getParent() == node.getParent().getParent().getLeftChild()){
- if(node.getParent().getParent().getRightChild().getColor())
- RedUncle(node);
- else if(!node.getParent().getParent().getRightChild().getColor())
- BlackUncle(node);
- }else if(node.getParent() == node.getParent().getParent().getRightChild()){
- if(node.getParent().getParent().getLeftChild().getColor())
- RedUncle(node);
- else if(!node.getParent().getParent().getRightChild().getColor())
- BlackUncle(node);
- }
- }
- }
- private void RedUncle(INode<T,V> node){
- if(node.getParent()==null)
- return;
- if(node.getParent().getParent()==null)
- return;
- if(node==root)
- node.setColor(false);
- if(node.getParent() == node.getParent().getParent().getLeftChild()){
- if(node.getParent().getParent().getRightChild().getColor()) {
- node.getParent().setColor(false);
- node.getParent().getParent().getRightChild().setColor(false);
- node.getParent().getParent().setColor(true);
- }
- }else if(node.getParent() == node.getParent().getParent().getRightChild()){
- if(node.getParent().getParent().getLeftChild().getColor()) {
- node.getParent().setColor(false);
- node.getParent().getParent().getLeftChild().setColor(false);
- node.getParent().getParent().setColor(true);
- }
- }
- node=node.getParent().getParent();
- }
- private void BlackUncle(INode<T,V> node){
- if(node.getParent()==null)
- return;
- if(node.getParent().getParent()==null)
- return;
- if((node==node.getParent().getLeftChild())
- && (node.getParent()==node.getParent().getParent().getLeftChild())){
- INode<T,V> temp=node.getParent().getRightChild();
- INode<T,V> grandparent=node.getParent().getParent();
- if(grandparent.getParent()==null)
- node.getParent().setParent(root);
- else
- node.getParent().setParent(grandparent.getParent());
- node.getParent().setRightChild(grandparent);
- node.getParent().getRightChild().setLeftChild(temp);
- node.setColor(true);
- node.getParent().setColor(false);
- node.getParent().getRightChild().setColor(true);
- }else if((node==node.getParent().getRightChild()
- && (node.getParent()==node.getParent().getParent().getLeftChild()))){
- LeftRotate(node.getParent());
- INode<T,V> first=node.getLeftChild();
- INode<T,V> temp=first.getParent().getRightChild();
- INode<T,V> grandparent=first.getParent().getParent();
- if(grandparent.getParent()==null)
- first.getParent().setParent(root);
- else
- first.getParent().setParent(grandparent.getParent());
- first.getParent().setRightChild(grandparent);
- first.getParent().getRightChild().setLeftChild(temp);
- first.setColor(true);
- first.getParent().setColor(false);
- first.getParent().getRightChild().setColor(true);
- }else if((node==node.getParent().getRightChild())
- && (node.getParent()==node.getParent().getParent().getRightChild())){
- INode<T,V> temp=node.getParent().getLeftChild();
- INode<T,V> grandparent=node.getParent().getParent();
- if(grandparent.getParent()==null)
- node.getParent().setParent(root);
- else
- node.getParent().setParent(grandparent.getParent());
- node.getParent().setLeftChild(grandparent);
- node.getParent().getLeftChild().setRightChild(temp);
- node.setColor(true);
- node.getParent().setColor(false);
- node.getParent().getLeftChild().setColor(true);
- }else if((node==node.getParent().getLeftChild()
- && (node.getParent()==node.getParent().getParent().getRightChild()))){
- RightRotate(node.getParent());
- INode<T,V> first=node.getRightChild();
- INode<T,V> temp=first.getParent().getLeftChild();
- INode<T,V> grandparent=first.getParent().getParent();
- if(grandparent.getParent()==null)
- first.getParent().setParent(root);
- else
- first.getParent().setParent(grandparent.getParent());
- first.getParent().setLeftChild(grandparent);
- first.getParent().getLeftChild().setRightChild(temp);
- first.setColor(true);
- first.getParent().setColor(false);
- first.getParent().getLeftChild().setColor(true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement