Advertisement
dfilipeloja

Arvore Binaria

Jan 16th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. public class ArvoreBinariaNovo {
  2.  
  3.     private static class Node {
  4.  
  5.         public Node noEsquerda, noDireita;
  6.         public int valor;
  7.  
  8.         public Node(int valor) {
  9.             this.valor = valor;
  10.             this.noEsquerda = null;
  11.             this.noDireita = null;
  12.         }
  13.  
  14.         @Override
  15.         public String toString() {
  16.             return "" + this.valor;
  17.         }
  18.     }
  19.  
  20.     private Node raiz;
  21.  
  22.     public ArvoreBinariaNovo() {
  23.         raiz = null;
  24.     }
  25.  
  26.     public void inserir(int valor) {
  27.         inserir(raiz, valor);
  28.     }
  29.  
  30.     private void inserir(Node node, int valor) {
  31.         if (node.valor == valor)
  32.             return;
  33.        
  34.         if (valor < node.valor) {
  35.             if(node.noEsquerda != null) {
  36.                 insert(node.noEsquerda, valor);
  37.             } else {
  38.                 node.noEsquerda = new Node(valor);
  39.             }
  40.         } else if (valor > node.valor) {
  41.             if(node.noDireita != null) {
  42.                 insert(node.noDireita, valor);
  43.             } else {
  44.                 node.noDireita = new Node(valor);
  45.             }
  46.         }
  47.     }
  48.  
  49.     public boolean existe(int valor) {
  50.         return existe(raiz, valor);
  51.     }
  52.  
  53.     private boolean existe(Node node, int valor) {
  54.         if (node == null) {
  55.             return false;
  56.         }
  57.  
  58.         if (valor == node.valor) {
  59.             return true;
  60.         }
  61.  
  62.         if (valor < node.valor) {
  63.             return existe(node.noEsquerda, valor);
  64.         } else {
  65.             return existe(node.noDireita, valor);
  66.         }
  67.     }
  68.  
  69.     public boolean remove(int valor) {
  70.         if (!existe(valor)) {
  71.             return false;
  72.         } else {
  73.             remove(raiz, valor);
  74.             return true;
  75.         }
  76.     }
  77.  
  78.     private int elemMin(Node node) {
  79.         int min = node.valor;
  80.  
  81.         while (node.noEsquerda != null) {
  82.             min = node.noEsquerda.valor;
  83.             node = node.noEsquerda;
  84.         }
  85.         return min;
  86.     }
  87.  
  88.     private Node remove(Node node, int valor) {
  89.         if (node == null) {
  90.             return node;
  91.         }
  92.  
  93.         if (valor < node.valor) {
  94.             node.noEsquerda = remove(node.noEsquerda, valor);
  95.         } else if (valor > node.valor) {
  96.             node.noDireita = remove(node.noDireita, valor);
  97.         } else {
  98.             if (node.noEsquerda == null) {
  99.                 return node.noDireita;
  100.             } else if (node.noDireita == null) {
  101.                 return node.noEsquerda;
  102.             }
  103.  
  104.             node.valor = elemMin(node.noDireita);
  105.             node.noDireita = remove(node.noDireita, node.valor);
  106.         }
  107.         return node;
  108.     }
  109.  
  110.     @Override
  111.     public String toString() {
  112.         StringBuilder sb = new StringBuilder();
  113.         appendToString(raiz, sb);
  114.  
  115.         return sb.toString();
  116.     }
  117.  
  118.     private void appendToString(Node node, StringBuilder sb) {
  119.         if (node == null) {
  120.             return;
  121.         }
  122.  
  123.         sb.append("(" + node + ", " + node.noEsquerda + ", " + node.noDireita + ")\n");
  124.         appendToString(node.noEsquerda, sb);
  125.         appendToString(node.noDireita, sb);
  126.     }
  127.  
  128.     public static void main(String[] args) {
  129.         ArvoreBinariaNovo arv = new ArvoreBinariaNovo();
  130.  
  131.         arv.inserir(50);
  132.         arv.inserir(30);
  133.         arv.inserir(20);
  134.         arv.inserir(18);
  135.         arv.inserir(16);
  136.         arv.inserir(19);
  137.         arv.inserir(22);
  138.         arv.inserir(40);
  139.         arv.inserir(35);
  140.         arv.inserir(42);
  141.         arv.inserir(70);
  142.         arv.inserir(60);
  143.         arv.inserir(80);
  144.         arv.inserir(75);
  145.        
  146.         System.out.println(arv);
  147.        
  148.         //remover raiz
  149.         System.out.println(arv.remove(50));
  150.        
  151.         //remover dois filhos
  152.         //System.out.println(arv.remove(20));
  153.        
  154.         //remover um filho
  155.         //System.out.println(arv.remove(80));
  156.        
  157.         //remover sem filhos
  158.         //System.out.println(arv.remove(16));
  159.  
  160.         System.out.println(arv);
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement