pablohf

Untitled

Mar 17th, 2013
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.79 KB | None | 0 0
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package treeapp;
  6.  
  7. /**
  8.  *
  9.  * @author pablo
  10.  */
  11. public class Tree {
  12.  
  13.     private Node root;                           // o único campo de dado em Tree
  14.  
  15.     public Node find(int key) {                  // encontra no com uma dada chave
  16.         // (assume arvore nao vazia)
  17.         Node current = root;                     // começa na raiz
  18.         while (current.iData != key) {             // enquanto nao coincide
  19.             if (key < current.iData) {            // ir para a esquerda?
  20.                 current = current.leftChild;
  21.             } else {
  22.                 current = current.rightChild;    // ou para a direita?
  23.             }
  24.             if (current == null) {                // se nao ha filho
  25.                 return null;                        // nao o encontrou              
  26.             }
  27.  
  28.         }
  29.         return current;                             // encontrou-o
  30.     }
  31.  
  32.     public void insert(int id, double dd) {
  33.         Node newNode = new Node();                         // cria novo nó
  34.         newNode.iData = id;                                // insere dado
  35.         newNode.dData = dd;
  36.  
  37.         if (root == null) {                                // sem nó na raiz
  38.             root = newNode;
  39.         } else {                                             // raiz ocupada
  40.             Node current = root;                           // começa na raiz
  41.             Node parent;
  42.             while (true) {                                   // (sai internamente)
  43.                 parent = current;
  44.                 if (id < current.iData) {                    // vai p/ esquerda?
  45.                     current = current.leftChild;
  46.                     if (current == null) {                   // se fim da linha,
  47.                         parent.leftChild = newNode;        // insere a esquerda
  48.                         return;
  49.                     }
  50.                 } // fim do if de ir p/ esquerda;
  51.                 else {                                      // ou para a direita?
  52.                     current = current.rightChild;
  53.                     if (current == null) {                 // se fim da linha
  54.                         parent.rightChild = newNode;       // inserir a direita
  55.                         return;
  56.                     }
  57.                 } // fim do else ir para a direita
  58.             } // fim do while
  59.         } // fim do else não raiz
  60.     } // fim de insert()
  61.  
  62.     public void delete(int id) {
  63.     }
  64.  
  65.     private void inOrder(Node localRoot) {
  66.         if (localRoot != null) {
  67.             inOrder(localRoot.leftChild);
  68.  
  69.             System.out.println(localRoot.iData + " ");
  70.             inOrder(localRoot.rightChild);
  71.         }
  72.     }
  73.  
  74.     private void preOrder(Node localRoot) {
  75.         if (localRoot != null) {
  76.             System.out.println(localRoot.iData + " ");
  77.  
  78.             preOrder(localRoot.leftChild);
  79.             preOrder(localRoot.rightChild);
  80.         }
  81.     }
  82.  
  83.     public void posOrder(Node localRoot) {
  84.         posOrder(localRoot.leftChild);
  85.         posOrder(localRoot.rightChild);
  86.  
  87.         System.out.println(localRoot.iData + " ");
  88.     }
  89.  
  90.     public Node minimum() {                      // retorna nó com chave de valor mínimo
  91.         Node current, last = null;
  92.         current = root;                         // começa na raiz
  93.  
  94.         while (current != null) {                 // até o fundo,
  95.             last = current;                     // lembra nó
  96.             current = current.leftChild;        // vai para o filho a esquerda
  97.         }
  98.         return last;
  99.     }
  100.  
  101.     public Node maximum() {
  102.         Node current, last = null;
  103.         current = root;
  104.  
  105.         while (current != null) {
  106.             last = current;
  107.             current = current.rightChild;
  108.         }
  109.         return last;
  110.     }
  111.  
  112. // retorna nó com o próximo valor mais alto depois de delNode
  113. // vai p/ filho à direita, então p/ descendentes dele à esquerda
  114.     private Node getSuccessor(Node delNode) {
  115.         Node successorParent = delNode;
  116.         Node successor = delNode;
  117.         Node current = delNode.rightChild;          // vai p/ filho à direita
  118.  
  119.         while (current != null) {                   // até não mais
  120.             successorParent = successor;            // filhos à esquerda,
  121.             successor = current;
  122.             current = current.leftChild;            // vai para filho à esquerda
  123.         }
  124.  
  125.         if (successor != delNode.rightChild) {                      // se sucessor não é
  126.             successorParent.leftChild = successor.rightChild;       // o filho à direita,
  127.             successor.rightChild = delNode.rightChild;              // faz conexões
  128.         }
  129.         return successor;
  130.     }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment