Projeto de Implementação usando char - Árvores Binárias

Preciso de ajuda a conseguir montar uma implementação em char, consegui encontrar um modelo de árvore binária mas sendo inteira, como mudo o código todo para char, o que eu devo aproveitar do código como base modelo?

import java.util.Scanner;
public class Main {
    private static class ARVORE {
        public int num;
        public ARVORE dir, esq;
    }
    public static ARVORE inserir(ARVORE aux, int num) {
        if (aux == null) {
            aux = new ARVORE();
            aux.num = num;
            aux.esq = null;
            aux.dir = null;
         } else if (num < aux.num) {
            aux.esq = inserir(aux.esq, num);
        } else {
            aux.dir = inserir(aux.dir, num);
        }
        return aux;
    }
    public static String imprimir(ARVORE aux) {
    	String retorno;
    	retorno = "(";
        if (aux != null) {
        	retorno += "C" + aux.num; 
            retorno += imprimir(aux.esq);
            retorno += imprimir(aux.dir);

        }
        retorno += ")";
        return retorno;

    }
    public static boolean localizar(ARVORE aux, int num, boolean loc) {
        if (aux != null && loc == false) {
            if (aux.num == num) {
                loc = true;
            } else if (num < aux.num) {
                loc = localizar(aux.esq, num, loc);
            } else {
                loc = localizar(aux.dir, num, loc);
            }
        }
        return loc;
    }
    public static ARVORE excluir(ARVORE aux, int num) {

        ARVORE p, p2, r = null;
        if (aux.num == num) {
            if (aux.esq == aux.dir) {
                return null;
            } else if (aux.esq == null) {
                return aux.dir;
            } else if (aux.dir == null) {
                return aux.esq;
            } else {
                p2 = aux.dir;
                p = aux.dir;
                while (p.esq != null) {
                    r = p;
                    p = p.esq;
                }
                aux.num = p.num;
                p = null;
                r.esq = null;
                return aux;
            }
        } else if (aux.num < num) {
            aux.dir = excluir(aux.dir, num);
        } else {
            aux.esq = excluir(aux.esq, num);
        }
        return aux;
    } 

    public static void main(String[] args) {       
    	Scanner entrada = new Scanner(System.in);
    	ARVORE a = null;
        int n = entrada.nextInt();
        for(int i = 0; i < n; i++){
        	a = inserir(a, entrada.nextInt());
        }
        int num = entrada.nextInt();
        if( localizar(a, num, false)){
        	excluir(a, num);
        }
        else{
        	inserir(a, num);
        }
        System.out.println(imprimir(a));
    }

}

Projeto passado pela professora:

image

Você tentou fazer alguma alteração?

Uma dica pra você começar é mudar onde estiver int X (onde X pode ser qualquer coisa, como int num) para char X (basicamente, troca a declaração de int por char).

Também precisará mudar as entradas nextInt() para algo como next().chartAt(0), que pega o primeiro caracter digitado na entrada.

A partir daí, veja os problemas que dão e ajuste de acordo.

Abraço.

Estou alterando aos poucos mas vejo que tem muita coisa para alterar. Vou vendo aqui e caso eu tenha dúvidas eu pergunto por aqui.

package Ver;


public class ArvoreBinaria {

	private Node raiz;
    private int tamanho;
    
    //funções basicas
    public int size(){
        return tamanho;
    }
    
    public boolean isEmpty(){
        return (raiz == null);
    }
   
    //construtor
    public ArvoreBinaria(){
        raiz = null;
        tamanho = 0;
    }
    
    
    //setters
    public void inserirNO(Character valor){
        raiz = inserirNO(valor, raiz);
        tamanho ++;
    } private Node inserirNO(Character valor, Node no){
        if(no == null) return new Node (valor);
        else if ((char) valor > (char) no.getValor ()) 
            no.setDireita (inserirNO(valor, no.getDireita ()));
        else if ((char) valor < (char) no.getValor ())
            no.setEsquerda (inserirNO(valor, no.getEsquerda()));
        else System.out.println ("valor já existe");
        
        return no;
    }
    
    
    
    public void remove(char valor){
        remove(valor, raiz);
    } private Node remove (Object valor, Node no) {        
        if (no == null) return null;
        else if ((char) no.getValor () > (char) valor)  no.setEsquerda (remove (valor, no.getEsquerda ())); 
        else if ((char) no.getValor () < (char) valor)  no.setDireita (remove (valor, no.getDireita ())); 
        else { 
            if (no.getEsquerda () == null && no.getDireita () == null) no = null; 
            else if (no.getEsquerda () != null && no.getDireita () != null){ 
                Node maiorEsquerda = no.getEsquerda();
                while (maiorEsquerda.getDireita() != null) 
                    maiorEsquerda = maiorEsquerda.getDireita();
                
                no.setValor (maiorEsquerda.getValor ());
                remove (maiorEsquerda.getValor (), no.getEsquerda ());
              
                
                if(no.getEsquerda ().getValor ().equals (no.getValor ())) no.setEsquerda (null);
                if(no.getDireita  ().getValor ().equals (no.getValor ())) no.setDireita (null);
            } else { 
                if(no == raiz) raiz = (no.getEsquerda () != null ) ? no.getEsquerda () : no.getDireita ();
                no = ( no.getEsquerda () != null ) ? no.getEsquerda () : no.getDireita ();
            }
        }
        
        return no;
    }
    
    private Node getNoAnterior (Object valor) {
        Node no = raiz;
        Node anterior = null;
        
        while (no != null && no.getValor () != valor) {  // acha o no com o valor igual
            anterior = no;
            if ((char) no.getValor () < (char) valor)  no = no.getDireita ();
            else  no = no.getEsquerda ();
        }
        
        if (no != null && no.getValor () == valor)  return anterior;
        return null;        
    }


    public void exibir () {
        if (!isEmpty ()){ 
            System.out.println (raiz.getValor () + " RAIZ");

            exibir (raiz.getDireita (), " |__");
            exibir (raiz.getEsquerda (), " |__");
        }
    } private void exibir (Node no, String separador) {
        if (no != null) {
            Node anterior = getNoAnterior (no.getValor ());
            if (no.equals (anterior.getEsquerda ()) == true)  System.out.println (separador + no.getValor () + " E");
            else System.out.println (separador + no.getValor () + " D");
            
          
            exibir (no.getDireita (), "    " + separador);  //adicionar espaço
            exibir (no.getEsquerda (), "    " + separador); //adicionar espaço
        }
    }
    
        
}
 






package Ver;


public class Node {
	private Node direita;      
	private Node esquerda;
	private Object valor;      
	
	public Node (Object valor) {
        setValor (valor);
        setEsquerda (null);
        setDireita (null);
   
    }
    

	public void setValor(Object valor) {
		this.valor = valor;
	}

	public Object getValor() {
		return valor;
	}

	public Node getDireita() {
		return direita;
	}

	public void setDireita(Node direita) {
		this.direita = direita;
	}

	public Node getEsquerda() {
		return esquerda;
	}

	public void setEsquerda(Node esquerda) {
		this.esquerda = esquerda;
	}

	
}


Como devo montar um menu em relação a esse código acima, para puxar informação deles? consegui fazer até o momento isso:
package Ver;

import java.util.Scanner;

public class MenuArvore {

	public static void main(String[] args) {

		 char op;
		 Scanner sc = new Scanner(System.in);
		 
		 System.out.println("Informe o que deseja escolher da árvore binária:");
		 System.out.println("1- Inserir");
		 System.out.println("2- Remover");
		 System.out.println("3- Exibir");
		 System.out.println("4- Sair");
		 op = sc.next().charAt(0);
		 
		 switch(op) {
		 case'1':
			 System.out.println("Inserindo elemento na árvore binária");
			 //puxar informações do código
			 break;
		 case'2':
			 System.out.println("Removendo elemento na árvore binária");
			 //puxar informações do código
			 break;
		 case'3':
			 System.out.println("Exibindo elemento na árvore binária");
			 //puxar informações do código
			 break; 
		 case'4':
			 System.out.println("Saindo da árvore binária");
			 break;
		 }
		 
	}
}