Estoy estudiando para un examen y no soy capaz de hacer este ejercicio. A ver si me puedes dar alguna ayuda. Gracias Implementar un método arbolSuma que reciba como parámetro de entrada un árbol binario de números enteros y devuelva otro árbol binario de números enteros en el que cada uno de sus nodos contenga la suma de él mismo junto con todos sus nodos
descendientes.
1 Respuesta
Respuesta de alejosoft
1
1
alejosoft, 3 años de experiencia como Ingeniero de Sistemas, I speak English...
Para la solución necesitas 2 clases la clase NodoArbolBinario y ArbolBinario y en la clase ArbolBinario se encuentra los métodos arbolSuma uno publico y otro privado, el que debes llamar desde la clase donde esta el main es el publico es decir el que recibe el ArbolBinario por parámetro, estas son: //************************************ // clase NodoArbolBinario //************************************ public class NodoArbolBinario { private int info = 0; private NodoArbolBinario derecho = null; private NodoArbolBinario izquierdo = null; public NodoArbolBinario ( int x ) { this.info = x; this.derecho = null; this.izquierdo = null; } public NodoArbolBinario getDerecho(){ return this.derecho; } public void setDerecho(NodoArbolBinario derecho){ this.derecho = derecho; } public int getInfo(){ return this.info; } public void setInfo(int info){ this.info = info; } public NodoArbolBinario getIzquierdo(){ return this.izquierdo; } public void setIzquierdo(NodoArbolBinario izquierdo){ this.izquierdo = izquierdo; } } //************************************ // clase ArbolBinario //************************************ public class ArbolBinario { private NodoArbolBinario raiz = null; private NodoArbolBinario padre = null; private boolean centinela = false, sw = false; public ArbolBinario () { } public NodoArbolBinario adicionar( int x ) { NodoArbolBinario p = new NodoArbolBinario ( x ), r = null; if ( this.raiz == null ) { this.raiz = p; } else { NodoArbolBinario q = raiz; while ( q != null ) { r = q; if ( x >= q.getInfo() ) { q = q.getDerecho(); } else { q = q.getIzquierdo(); } } } if ( x >= r.getInfo() ) { r.setDerecho( p ); } else { r.setIzquierdo( p ); } return p; } public ArbolBinario arbolSuma(ArbolBinario tree){ ArbolBinario res = new ArbolBinario(); arbolSuma(res,tree.raiz); return res; } private int arbolSuma(ArbolBinario res, NodoArbolBinario p){ if ( p == null ){ return 0; } else { int sum = p.getInfo(); NodoArbolBinario aux = res.adicionar(sum); sum += arbolSuma(res, p.getIzquierdo() ); sum += arbolSuma(res, p.getDerecho() ); aux.setInfo(sum); return sum; } } } Espero que te sirva, y no olvides finalizar la pregunta.
1 comentario
Hola yo tebfk un detalle con un programa lo que tiene que hacer es sumanr todos los datos del árbol y dividirlo entre la cantidad de datos y que me diga cual es la mitad - edgar arzulluz
Hola yo tebfk un detalle con un programa lo que tiene que hacer es sumanr todos los datos del árbol y dividirlo entre la cantidad de datos y que me diga cual es la mitad - edgar arzulluz