Академический Документы
Профессиональный Документы
Культура Документы
/ **
* un elemento raíz único que apunta a una Lista <Nodo <T>> de elementos secundarios. No hay
* Este árbol proporciona un método para serializar el árbol en una lista haciendo un
* recorrido transversal de pedido anticipado. Tiene varios métodos para permitir una fácil
actualización de los nodos
* en el árbol.
*/
/ **
* Ctor predeterminado.
*/
public Tree () {
super ();
/ **
*/
}
/ **
*/
/ **
* Devuelve el árbol <T> como una lista de objetos de nodo <T>. Los elementos de la
*/
List < Node < T >> list = new ArrayList < Node < T >> ();
lista de retorno ; }
/ **
*/
/ **
* Camina el árbol en estilo de pedido anticipado. Este es un método recursivo y se
argumento *. Se agrega al segundo argumento, que se pasa por referencia * a medida que se
repite en el árbol.
*/
private void walk ( Nodo < T > elemento , Lista < Nodo < T >> lista ) {
/ **
* puede considerarse como una instrumentación para determinar la ubicación del tipo T
* en el Árbol <T>.
*/
/ **
* Ctor predeterminado.
*/
public Node () {
super ();
/ **
*/
this ();
setData ( datos );
/ **
* Devuelve los hijos del nodo <T>. El árbol <T> está representado por un solo
* Nodo raíz <T> cuyos hijos están representados por una Lista <Nodo <T>>. Cada uno de
método
getChildren () * devolverá los hijos de un Nodo <T>. * @return the children of Node <T>
*/
/ **
* Establece los elementos secundarios de un objeto Nodo <T>. Consulte los documentos de
getChildren () para
* más información.
*/
/ **
*/
if ( children == null ) {
return 0 ;
/ **
*/
if ( children == null ) {
}
/ **
*/
public void insertChildAt ( int index , Node < T > child ) arroja IndexOutOfBoundsException {
// esto es realmente un
volver ;
} else {
/ **
*/
public T getData () {
devolver esto . datos ;
sb . agregar ( "{" ). agregar ( getData (). toString ()). agregar ( ", [" );
int i = 0 ;
if ( i > 0 ) {
sb . adjuntar( "," );
i ++;
Ejemplo 2
/ **
* Un objeto DAO base que debe ser extendido por todos nuestros DAO individuales. Esta
* @version $ Revision $
*/
public abstract class AbstractHibernateDao extiende HibernateDaoSupport {
public AbstractHibernateDao () {
super ();
public List find ( final String hqlQuery , final String [] params , final Object [] paramValues ,
final Type [] paramTypes , final Integer start , final Integer count ) {
if ( params ! = null ) {
if ( inicio == nulo ) {
consulta . setFirstResult ( 0 );
} else {
if ( cuenta == nulo ) {
consulta. setMaxResults ( 0 );
} else {
consulta . setMaxResults ( count . intValue ());
/ **
*/
pública TaskDao () {
super ();
/ **
*/
/ **
*/
} else {
actualización ( tarea );
/ **
*/
/ **
* Devuelve todos los elementos secundarios de la Tarea que tiene la identificación principal
especificada.
* @ devuelve una lista de tareas que son elementos secundarios de la tarea especificada.
*/
parentId },
/ **
* Devuelve la primera tarea con el nombre especificado. Por lo general, esto nunca * se usará
directamente desde la aplicación, principalmente para su uso en pruebas.
*/
Tarea pública findByName ( String taskName ) { Lista < Tarea > tareas = super . find ( "from Task
donde taskName =: taskName" , nueva Cadena [] {
"taskName" },
/ **
* Objeto de acceso a datos para el objeto TaskTree. Este no es un verdadero Dao, ya que
public TaskTreeDao () {
super ();
/ **
*/
Lista < Nodo < Tarea >> tareas = taskTree . toList ();
/ **
* Obtiene un solo TaskTree por id. Esta es la cabeza de un método recursivo llamado
* a getRecursive ().
*/
Nodo < Tarea > rootElement = nuevo Nodo < Tarea > ( taskDao . Get ( id ));
return taskTree ;
/ **
*/
private void getRecursive ( Nodo < Task > taskElement , TaskTree tree ) {
List < Task > children = taskDao . findByParentId ( taskElement . getData (). getId ());
Lista < Nodo < Tarea >> childElements = new ArrayList < Nodo < Tarea >> ();
for ( Iterator < Task > it = children . iterator (); it . hasNext ();) {
Nodo < Tarea > childElement = nuevo Nodo < Tarea > ( childTask );
Ejemplo 3
Dado un árbol binario, BTree, implementar un método en éste que devuelva la altura del
mismo.
private E info;
BNode(E info) {
this.info = info;
left = l;
right = r;
}
E getInfo() {
return info;
BNode<E> getLeft() {
return left;
BNode<E> getRight() {
return right;
this.info = info;
this.left = left;
this.right = right;
if (side == LEFT_SIDE) {
if (left == null) {
left = tree;
} else {
if (right == null) {
right = tree;
} else {
} else {
BNode<E> subtree;
if (side == LEFT_SIDE) {
subtree = left;
left = null;
subtree = right;
right = null;
} else {
return subtree;
int size() {
int size = 1;
if (left != null) {
size += left.size();
if (right != null) {
size += right.size();
return size;
}
int height() {
int hl = -1;
int hr = -1;
if (left != null) {
hl = left.height();
if (right != null) {
hr = right.height();
void preorder() {
System.out.println(info);
if (left != null) {
left.preorder();
if (right != null) {
right.preorder();
void inorder() {
if (left != null) {
left.inorder();
System.out.println(info);
if (right != null) {
right.inorder();
}
void postorder() {
if (left != null) {
left.postorder();
if (right != null) {
right.postorder();
System.out.println(info);
/* ********************************************** */
public BTree() {
root = null;
return root;
this.root = root;
}
public void insert(BTree<E> tree, int side) throws BTreeException {
root.insert(tree.getRoot(), side);
int size = 0;
if (root != null) {
size = root.size();
return size;
int h = -1;
if (root != null) {
h = root.height();
return h;
if (root != null) {
root.preorder();
if (root != null) {
root.inorder();
root.postorder();
super(mensaje);
Ejemplo 4
Dado un árbol binario, BTree, implementar un método en éste que devuelva el
número de nodos que tiene.
public TestNumNodes() {
BTree tree;
try {
tree.insert(subarbol, BTree.LEFT_SIDE);
tree.insert(temporal, BTree.RIGHT_SIDE);
subarbol.insert(temporal, BTree.LEFT_SIDE);
temporal = new BTree("trigo");
subarbol.insert(temporal, BTree.RIGHT_SIDE);
System.out.println(ex.getMessage());
return;
System.out.println("------------------");
System.out.println((new StringBuilder())
System.out.println("------------------");
Arboles Binarios
Ejercicio nº1:
I B A E D L F C H J K M G.
C) Diseñar una función para dar el recorrido en postorden dado el recorrido en preorden e
inorden y escribir un programa para comprobar el resultado del apartado anterior.
char *preorden="GEAIBMCLDFKJH";
char *inorden="IABEGLDCFMKHJ";
char *postorden;
/*---------------------------------------*/
if(n!=0){
pos[n-1]=pre[0];
longIzqda=strchr(in,pre[0])-in;
post (pre+1,in,pos,longIzqda);
post (pre+1+longIzqda,in+1+longIzqda,pos+longIzqda,n-1-longIzqda);
}
}
/*----------------------------------------*/
aux=strlen(preorden);
postorden=(char *)malloc(aux*sizeof(char));
if (postorden){
printf("El preorden es: %s\n",preorden);
printf("El inorden es: %s\n",inorden);
post(preorden,inorden,postorden,aux);
postorden[aux]='\0';
printf("El postorden calculado es: %s\n",postorden);
free(postorden);
}
else{
fprintf(stderr,"Error: Sin memoria\n");
return 1;
}
return 0;
Ejercicio nº2:
Implementar una función no recursiva para recorrer un árbol binario en inorden.
/*---------------------------------------*/
p=CrearPila(sizeof(NodoB));
et=malloc(tamano);
if(!et){
.... /*Error:Sin memoria*/
}
aux=NODOB_NULO;
Push(&aux,p);
nodoActual=RaizB(T);
fin=0;
while(!fin){
while(nodoActual!=NODOB_NULO){
Push(&nodoActual,p);
nodoActual=HijoIzqdaB(nodoActual,T);
}
Tope(&nodoActual,p);
Pop(p);
if (nodoActual!=NODOB_NULO){
EtiquetaArbolB(et,nodoActual,T);
(*EscribirElemento)(et);
nodoActual=HijoDrchaB(nodoActual,T);
}
else fin=1;
}
free(et);
DestruirPila(p);
}
Ejercicio nº3:
void Refleja(ArbolB T)
{
ArbolB Ti,Td;
if(T!=ARBOLB_VACIO){
Ti=PodarHijoIzqdaB(RaizB(T),T);
Td=PodarHijoDrchaB(RaizB(T),T);
Refleja(Ti);
InsertarHijoDrchaB(RaizB(T),Ti,T);
Refleja(Td);
InsertarHijoIzqdaB(RaizB(T),Td,T);
}
}
Ejercicio nº4:
Escribir una función recursiva que encuentre el número de nodos de un árbol binario.
//El algoritmo es muy sencillo considerando que el número de nodos de un árbol binario es el número de
nodos del hijo a la izquierda más el de su hijo a la derecha más 1.
//Para calcular el número de nodos de un árbol T se haría mediante la llamada número (RaizB(T),T).
Ejercicio nº5:
//La altura de un árbol T es uno más el máximo de alturas de los subárboles izquierdo y derecho(La altura de
un árbol nulo está indefinida).
Ejemplo 3
Pre Orden (RID) 18, 12, 5, 9, 28, 20, 35
En Orden (IRD) 5, 9, 12, 18, 20, 28, 35
Post Orden (IDR) 9, 5, 12, 20, 35, 28, 18
Ejemplo 4