Está en la página 1de 11

ESCUELA PROFESIONAL DE CIENCIA DE LA

COMPUTACIÓN

TRABAJO FINAL: ALGORITMO Y ESTRUCTURA DE


DATOS

Profesor: Edward Hinojosa Cardenas

TEMA: Problemas de Arboles Binarios

INTEGRANTES:

Ccallo Valeriano, Denis Amilcar


Humpire Cutipa, Hayde Luzmila

Arequipa - 2017

Preguntas de Arboles Binarios


5.1.1 Pruebe que la raíz de un árbol binario es un antepasado de todo nodo en el
árbol, excepto de sí mismo.

DEF ÁRBOL BINARIO: Un árbol binario es un grafo conexo(solo un camino), acíclico (no
forma ciclos) no dirigido tal que el grado de cada vértice no es mayor a 3. De esta forma
solo existe un camino entre un par de nodos.

Como vemos por la definición la raíz es el antepasado de todos los demás nodos, no puede
haber otro ps por definición de árbol binario la raíz sería el antepasado de todos los demás
nodos expecto de el mismo, caso contrario ya no seria un arbol binario

5.1.2 Pruebe que un nodo de un árbol binario tiene como máximo un padre.
Por definición un árbol es binario porque puede tener hasta 2 subárboles , conexo y acíclico,
caso contrario no sería un arbol binario.

5.1.3 ¿Cuántos ancestros tiene un nodo en el nivel n en un árbol binario? Prueba su


respuesta.
Ancestro de un nodo son aquellos que están por encima del nodo hasta la raiz, entonces un
nodo tienen n ancestros en un arbol de nivel n, donde la raíz es nivel cero.
5.1.4 Escriba algoritmos recursivos y no recursivos para determinar:

A) el número de nodos en un árbol binario;

int numnodos=0;
void Nnodos(ArbolBB *aux)
{
if(aux==NULL)
return;
Nnodos(aux->derecho);
numnodos++;
Nnodos(aux->izquierdo);
}

B) la suma del contenido de todos los nodos en un árbol binario;

int suma=0;
void suma_nodos(ArbolBB *aux)
{
if(aux==NULL)
return;
suma_nodos(aux->derecho);
suma=suma+aux->num;
suma_nodos(aux->izquierdo);
}
C) la profundidad de un árbol binario.
int altura(ArbolBB *aux)
{
int altura_izq, altura_der;
if(aux==NULL)
return -1;
else
{
altura_izq=altura(aux->izquierdo);
altura_der=altura(aux->derecho);
if(altura_izq>altura_der)
return altura_izq+1;
else
return altura_der+1;
}

5.1.6 Pruebe que un árbol estrictamente binario con n hojas contiene 2n -1 nodos.

Comience con un árbol mínimo de 1 hoja: L = 1, N = 1 sustituto en N = 2n - 1 y vea que la


fórmula es verdadera (1 = 1, hasta ahora todo bien).

Ahora agrega otro pedazo mínimo al árbol. Para hacer eso, necesitas agregar otros dos
nodos y el árbol se ve así:

Tenga en cuenta que debe agregar nodos en pares para cumplir con la restricción
establecida anteriormente. Agregar un par de nodos siempre agrega una hoja (dos nuevos
nodos hoja, pero pierde uno ya que se convierte en un nodo interno). El crecimiento del
nodo progresa a medida que la serie: 1, 3, 5, 7, 9 ... pero el crecimiento de la hoja es: 1, 2,
3, 4, 5 ... Es por eso que la fórmula N = 2n - 1 es válida para este tipo de árbol.

5.1.9 Dos árboles binarios son similares si ambos están vacíos, o si no están vacíos y
sus subárboles izquierdos y subárboles derechos son similares. Escriba un algoritmo
para determinar si dos árboles binarios son similares.
bool flag= true;

bool Arbolsimilar(ArbolBB *aux1,ArbolBB *aux2)


{
/// Arbol vacios iguales
if (aux1 == NULL && aux2 == NULL)
return true;

/// Arbol vacio no es igual a uno no vacio


if ((aux1 == NULL && aux2 != NULL) || (aux1 != NULL && aux2 == NULL))
return false;

/// de lo contrario verificamos recurcivamente


return Arbolsimilar(aux1->izquierdo, aux2->izquierdo) && Arbolsimilar(aux1->derecho, aux2-
>derecho);
}

5.1.10 Dos árboles binarios son similares reflejados si ambos están vacíos o si ambos
no están vacíos y el subárbol izquierdo de cada uno es similar a la sublínea derecha
de la otra. Escriba un algoritmo para determinar si dos árboles binarios son similares
reflejados.
bool Reflejados(ArbolBB * root1, ArbolBB * root2)
{
if (root1 == NULL && root2 == NULL)
{
return true;
}
///si cualquier nodo no tiene el correspondiente nodo en el otro árbol, devuelve false
if ((root1 == NULL && root2 != NULL) || (root1 != NULL && root2 == NULL))
{
return false;
}
///si el nodo en un árbol es el lado secundario en otro árbol, y viceversa
return Reflejados(root1->izquierdo, root2->derecho) && Reflejados(root1->derecho, root2-
>izquierdo);

5.1.11 Escriba algoritmos para determinar si un árbol binario es o no similar o similar


reflejado (consulte los ejercicios anteriores) a un subárbol de otro árbol.
Paso 1- hallar las direcciones de los subárboles que queremos comparar
Paso 2.- Pasar esas direcciones de los subárboles a los respectivos algoritmos para ver si
son o no similares o si son o no similares reflejados

5.1.13
a) Escriba un algoritmo que acepte un puntero a un árbol binario de búsqueda y
elimine el elemento más pequeño del árbol.
int minimo=0;
int Minimo(ArbolBB *aux)
{
if (aux == NULL)
return aux->num;
while (aux->izquierdo != NULL )
aux = aux->izquierdo;
return aux->num;
}
int main()
{
minimo=Minimo(raiz1);
remover(raiz1,minimo);
return 0;

BIbliografía:
Matemáticas Discretas y Combinatoria ;Ralph P. Grimaldi 3° edición Pretince Hall.
Matemática Discretas Sexta edición Richard Johnsonbaugh; Pretince Hall.
Matematicas Discretas eduard R. Sheninerman; thomson Leraning
Estructura de datos: Oswaldo Cairó, Silvia Guardati.

4)
A) numero de nodos en arbol binario
B) la suma del contenido de todos los nodos en un árbol binario;

C) la profundidad de un árbol binario. (altura)

9) Arboles similares
10) arboles similares reflejados
13) eliminar el mínimo