package util;

public class Arvore {
	private Celula raiz;
	private int size;
	
	private class Celula implements Element{//a classe implementa a interface element pra no acessar os
		private Object data;                //dados diretamente
		private Celula pai;
		private Celula noEsquerda;
		private Celula noDireita;
		
		public Celula(Celula pai, Object data){
			this.pai = pai;
			this.data = data;
		}
		
		public Celula getPai(){
			return pai;
		}
		
		public void setPai(Celula n){
			this.pai = n;
		}
		
		public Celula getNoEsquerda(){
			return noEsquerda;
		}
		
		public void setNoEsquerda(Celula n){
			this.noEsquerda = n;
		}
		
		public Celula getNoDireita(){
			return noDireita;
		}
		
		public void setNoDireita(Celula n){
			this.noDireita = n;
		}
		
		@Override
		public Object getData() {
			return data;
		}
		
		public void setData(Object o){
			this.data = o;
		}
	}
	
	public void addRaiz(Object o){
		if(raiz == null){
			raiz = new Celula(null, o);
		}
	}
	
	public Element getRaiz(){
		return raiz;
	}
	
	public void addNoDireita(Element e, Object o){
		((Celula) e).setNoDireita(new Celula((Celula) e, o));//casting de element para celula nos dois casos
		size++;
	}
	
	public Element getNoDireita(Element e){
		return ((Celula) e).getNoDireita();//mesmo casting aqui
	}
	
	public void addNoEsquerda(Element e, Object o){
		((Celula) e).setNoEsquerda(new Celula((Celula) e, o));//mesmo caso do add direita
		size++;
	}
	
	public Element getNoEsquerda(Element e){
		return ((Celula) e).getNoEsquerda();
	}
	
	public void set(Element e, Object o){//setta um dado em uma celula da arvore, dando casting de element para celula
		((Celula) e).setData(o);
	}
	
	public class Iterador implements Iterator{// o iterador  usado com fila, pra isso eu implementei ela 
		private IFila fila = new Fila();	//e instanciei atravs da interface
		
		public Iterador(){
			fila.inserirFinal(raiz);
		}
		
		@Override
		public boolean temProximo() {
			if(fila.estaVazia() == true){
				return false;
			}
			
			return true;
		}

		@Override
		public Object obterProximo() {//esse metodo ele pega os filhos da direita e da esquerda e coloca na fila
			Celula n = (Celula) fila.remover();
			
			if(n.getNoDireita() != null){
				fila.inserirFinal(n.getNoDireita());
			}
			
			if(n.getNoEsquerda() != null){
				fila.inserirFinal(n.getNoEsquerda());
			}
			
			return n.getData();
		}
		
	}
	
	
}

@@ -167,16 +167,17 @@
 nt pra n
+%C3%A3
 o acessa
@@ -182,16 +182,16 @@
 sar os%0D%0A
-
 %09%09privat
@@ -934,32 +934,1224 @@
 o;%0D%0A%09%09%7D%0D%0A%09%7D%0D%0A%09%0D%0A
+%09/*o metodo de inserir t%C3%A1 errado, pq n%C3%A3o t%C3%A1 inserindo ordenado, tem que ser tipo isso:%0D%0A%09%0D%0A%09*  public void inserir(Node node, int valor) %7B%0D%0A        if(this.root == null)%7B%0D%0A            this.root = new Node(valor);%0D%0A        %7D else %7B%0D%0A            if (valor %3C node.getValor()) %7B%0D%0A                if (node.getNoEsquerda() != null) %7B %0D%0A                    inserir(node.getNoEsquerda(), valor); %0D%0A                %7D else %7B %0D%0A                    //Se nodo esquerdo vazio insere o novo no aqui %0D%0A                    node.setNoEsquerda(new Node(valor)); %0D%0A                %7D %0D%0A                //Verifica se o valor a ser inserido %C3%A9 maior que o no corrente da %C3%A1rvore, se sim vai para subarvore direita %0D%0A            %7D else if (valor %3E node.getValor()) %7B %0D%0A                //Se tiver elemento no no direito continua a busca %0D%0A                if (node.getNoDireita() != null) %7B %0D%0A                    inserir(node.getNoDireita(), valor); %0D%0A                %7D else %7B%0D%0A                    //Se nodo direito vazio insere o novo no aqui %0D%0A                    node.setNoDireita(new Node(valor)); %0D%0A                %7D %0D%0A            %7D%0D%0A        %7D%0D%0A    %7D mas eu n%C3%A3o sei como faz com objetos, v%C3%AA se tu consegue fazer*/%0D%0A
 %09public void add
@@ -3014,16 +3014,17 @@
 terador 
+%C3%A9
  usado c
@@ -3117,16 +3117,17 @@
 ei atrav
+%C3%A9
 s da int

Update Arvore.java