Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con árboles binarios (https://www.clubdelphi.com/foros/showthread.php?t=83809)

avechuche 01-08-2013 01:53:20

Problemas con árboles binarios
 
Hola gente, necesito ayuda (De esto depende si apruebo o no Programación II ^^)

Tengo que hacer 5 ejercicios si o si (Además de aprobar el final) para aprobar la materia. Hice los 3, pero los otros dos no tengo ni idea (Al menos de uno)

1) Tengo que crear un algotirmo recursivo o no, que me permita construir un árbol binario de búsqueda a partir de un árbol binario.
2) Tengo que crear una función que me diga si un árbol es binario de búsqueda.

Les dejo el TAD que usamos, por si quieren intentar con ellos, o si tienen otros, desp me las arreglo para transformalo.
Código Delphi [-]
Procedure CrearArbolNulo(Var A: Arbol);
Function ArbolNulo(A: Arbol): Boolean; // Sinonimo de arbol vacio
Function ArbolLleno(A: Arbol): Boolean;
Function RamaNula(P: PosicionArbol): Boolean; // Controla si un apuntador es nil
Function RecuperarDatos(A: Arbol; P: PosicionArbol; Var X: TipoElemento): Boolean;
Function CargarArbol(Var A: Arbol): Boolean;
Function PreOrden(A: Arbol): String;
Function InOrden(A: Arbol): String;
Function PostOrden(A: Arbol): String;
Function Anchura(A: Arbol): String;
Function PreOrdenITE(A: Arbol): String;
Function Altura(A: Arbol): Integer;
Function BuscarPreOrden(A: Arbol; X: TipoElemento; ComparaPor:CampoComparar): PosicionArbol;
Function Nivel(A: Arbol; Q:PosicionArbol): Integer;
Function HijoIzquierdo(A: Arbol; P: PosicionArbol): PosicionArbol;
Function HijoDerecho(A: Arbol; P: PosicionArbol): PosicionArbol;
Function Padre(A: Arbol; Hijo: PosicionArbol): PosicionArbol;
// Busqueda Binaria
Function InsertarNodo(Var A: Arbol; X: TipoElemento; ComparaPor:CampoComparar): Boolean;
Function EliminarNodo(Var A: Arbol; X: TipoElemento; ComparaPor:CampoComparar): Boolean;
Function BusquedaBinaria(A: Arbol; X: TipoElemento; ComparaPor:CampoComparar): PosicionArbol;
// Busqueda Binaria Balanceado
Function InsertarNodoAVL(Var A: Arbol; X: TipoElemento; ComparaPor:CampoComparar): Boolean;
Function EliminarNodoAVL(Var A: Arbol; X: TipoElemento; ComparaPor:CampoComparar): Boolean;

Casimiro Notevi 01-08-2013 09:40:52

¿Y qué tienes hecho?
Una simple búsqueda en google te devuelve montones de ejemplos, ¿no te vale ninguno?

avechuche 02-08-2013 08:29:36

El que tenia que comprobar si es un árbol binario de búsqueda, ya lo resolvi, ese era el que tenia casi echo, pero me daba ciertos errores, el que me falta ahora, es pasar de un árbol binario a un árbol binario de búsqueda, ese si que no se como empezarlo! Ya busque en Google a ver si hay algun algoritmo echo, pero nada, ni parecido, como si nadie pasara de arbol a ABB ^^.

Casimiro Notevi 02-08-2013 09:46:24

Cita:

Empezado por avechuche (Mensaje 464857)
pasar de un árbol binario a un árbol binario de búsqueda

La verdad es que no entiendo la pregunta :confused:

nlsgarcia 02-08-2013 10:41:03

avechuche,

Cita:

Empezado por avechuche
...crear una función que me diga si un árbol es binario de búsqueda...

Revisa estos links:
Espero sea útil :)

Nelson.

avechuche 02-08-2013 22:53:53

Cita:

Empezado por Casimiro Notevi (Mensaje 464859)
La verdad es que no entiendo la pregunta :confused:

Claro es asi. Un árbol binario, significa que cada nodo puede tener 0, 1 ó 2 hijos, por eso binario. Pero no necesariamente es de busqueda. Un árbol de busqueda es cuando los hijos izquierdos son menores que el padre y los derechos son mayores.

Un ejemplo facil 4 <= 5 => 6. Ahi 5 es la raíz del árbol, 4 es el hijo izquierdo y es menor que la raíz y 6 es el hijo derecho y es mayor que la raíz. Este es un árbol binario de busqueda.

Ahora 5 <= 4 => 6, esto es un árbol binario, pero no de busqueda, porque la raíz que es 4 es menor que el hijo izquierdo.

Entonces yo tengo que generar un algoritmo que pase de arbol binario NO de busqueda a uno binario DE busqueda.

avechuche 02-08-2013 23:05:29

Cita:

Empezado por nlsgarcia (Mensaje 464860)
avechuche,



Revisa estos links:
Espero sea útil :)

Nelson.

Gracias Nelson. La teoria la tengo clara, lo que pasa es que no me doy cuenta como hacerlo, y mas con el tema de recursividad que es algo que no se usa todos los dias :)

nlsgarcia 03-08-2013 00:02:14

avechuche,

Cita:

Empezado por avechuche
...La teoria la tengo clara...

Te sugiero revisar los links del Msg #5, en ellos encontraras código que te dará una mejor idea de como empezar tu proyecto, el último link en particular contiene mucha información sobre arboles binarios.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 02:12:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi