// Recorrido de un árbol binario en postorden public static string postorden(Nodo r) { if (r != null) { return(postorden(r.subarbolIzdo()) + postorden(r.subarbolDcho()) + r.visitar()); } return(""); }
//Devuelve el número de nodos que tiene el árbol public static int numNodos(Nodo raiz) { if (raiz == null) { return(0); } else { return(1 + numNodos(raiz.subarbolIzdo()) + numNodos(raiz.subarbolDcho())); } }
//método interno para realizar la operación protected Nodo eliminar(Nodo raizSub, Comparador dato) { if (raizSub == null) { throw new Exception("No encontrado el nodo con la clave"); } else if (dato.menorQue(raizSub.valorNodo())) { Nodo iz; iz = eliminar(raizSub.subarbolIzdo(), dato); raizSub.ramaIzdo(iz); } else if (dato.mayorQue(raizSub.valorNodo())) { Nodo dr; dr = eliminar(raizSub.subarbolDcho(), dato); raizSub.ramaDcho(dr); } else // Nodo encontrado { Nodo q; q = raizSub; // nodo a quitar del árbol if (q.subarbolIzdo() == null) { raizSub = q.subarbolDcho(); } else if (q.subarbolDcho() == null) { raizSub = q.subarbolIzdo(); } else { // tiene rama izquierda y derecha q = reemplazar(q); } q = null; } return(raizSub); }
protected Nodo buscar(Nodo raizSub, Comparador buscado) { if (raizSub == null) { return(null); } else if (buscado.igualQue(raizSub.valorNodo())) { return(raizSub); } else if (buscado.menorQue(raizSub.valorNodo())) { return(buscar(raizSub.subarbolIzdo(), buscado)); } else { return(buscar(raizSub.subarbolDcho(), buscado)); } }
// método interno para susutituir por el mayor de los menores private Nodo reemplazar(Nodo act) { Nodo a, p; p = act; a = act.subarbolIzdo(); // rama de nodos menores while (a.subarbolDcho() != null) { p = a; a = a.subarbolDcho(); } act.nuevoValor(a.valorNodo()); if (p == act) { p.ramaIzdo(a.subarbolIzdo()); } else { p.ramaDcho(a.subarbolIzdo()); } return(a); }
/// <summary> /// /// </summary> /// <param name="buscado"></param> /// <returns></returns> public Nodo buscarIterativo(Object buscado) { Comparador dato; bool encontrado = false; Nodo raizSub = raiz; dato = (Comparador)buscado; while (!encontrado && raizSub != null) { if (dato.igualQue(raizSub.valorNodo())) { encontrado = true; } else if (dato.menorQue(raizSub.valorNodo())) { raizSub = raizSub.subarbolIzdo(); } else { raizSub = raizSub.subarbolDcho(); } } return(raizSub); }