Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. @Override
  2. public void remove(T element) {
  3. BSTNode<T> node = this.search(element); //Nó a ser removido
  4. if(!node.isEmpty()){ //Nao é possivel remover um no sentinela, entao verifica se o resultado da busca é um no sentinela.
  5.  
  6. if(node.isLeaf()){
  7. node.setData(null);
  8. node.setLeft(null);
  9. node.setRight(null);
  10. rebalanceUp(node); //Vai subindo ate chegar no no desbalanceado
  11. }else if(!node.isLeaf() && temApenasUmFilho(node)){ //Caso o node a ser removido NÃO seja folha e tenha apenas um filho
  12. if(!node.equals(root)){
  13. if(this.isLeftChild(node)){ //Se o node a ser removido for filho a esquerda:
  14. if(!node.getLeft().isEmpty()){
  15. node.getParent().setLeft(node.getLeft());
  16. node.getLeft().setParent(node.getParent());
  17. }else{
  18. node.getParent().setLeft(node.getRight());
  19. node.getRight().setParent(node.getParent());
  20. }
  21. }else{
  22. if(!node.getLeft().isEmpty()){ //Se o node a ser removido tiver filho a esquerda
  23. node.getParent().setRight(node.getLeft());
  24. node.getLeft().setParent(node.getParent());
  25. }else{
  26. node.getParent().setRight(node.getRight());
  27. node.getRight().setParent(node.getParent());
  28. }
  29. }
  30. }else{
  31. if (!node.getLeft().isEmpty()){
  32. this.root = (BSTNode<T>) node.getLeft();
  33. this.root.setParent(null);
  34. }else{
  35. this.root = (BSTNode<T>) node.getRight();
  36. this.root.setParent(null);
  37. }
  38. }
  39.  
  40. rebalanceUp(node);
  41. }else if(!node.isLeaf() && !temApenasUmFilho(node)){
  42. BSTNode<T> sucessor = this.sucessor(node.getData());
  43. T data = sucessor.getData();
  44. this.remove(sucessor.getData());
  45. node.setData(data);
  46.  
  47.  
  48. }
  49. }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement