Creación de una BST de una matriz

votos
1

Necesito crear un árbol de búsqueda binaria de la manera siguiente (extraño):

Me dan una matriz (A [n]). A [1] se convierte en la raíz del árbol.

  • Entonces, inserto A [1] + A [2] para el subárbol izquierdo (subtree1, que se utiliza a continuación) de la raíz y también insertar una [1] -A [2] para el subárbol derecho (subtree2) de la raíz.

  • Inserto A [1] + A [2] + A [3] para el subárbol izquierdo de subtree1 (subtree3) y A [1] + A [2] -A [3] para el subárbol derecho de subtree1 (subtree4).

  • Entonces, inserto A [1] -A [2] + A [3] para el subárbol izquierdo de subtree2 (subtree5) y A [1] -A [2] -A [3] para el subárbol derecho de subtree2 (subtree6 ).

  • Repito para subtree3, subtree4, subtree5, subtree6 hasta que llegue al final de la matriz.

Así que, básicamente, el primer elemento de la matriz se convierte en la raíz del árbol y luego moverse hacia abajo: Cada subárbol izquierdo tiene para el valor de la suma de su padre, más el siguiente elemento de la matriz y cada subárbol derecho ha de valor de la diferencia de su matriz y del siguiente elemento de la matriz.

Entiendo que necesito utilizar el concepto de recursividad pero de una forma modificada. Al escribir mi problema aquí y tratar de explicar a otra persona aparte de mi cerebro, de hecho me hizo formar de una manera que me dio algunas ideas para tratar, pero puedo ver el problema que estoy tratando de ser un problema habitual así que tal vez usted podría dar me algunos consejos sobre cómo utilizar la recursividad para construir el árbol.

Mirando a otras preguntas y las discusiones que entender que hay una política en contra de pedir soluciones integrales, así que quería dejar claro que yo no estoy pidiendo la solución, pero para la orientación a la misma. Si alguien quisiera tener una mirada te puedo mostrar lo que ya he hecho.

Publicado el 24/03/2011 a las 02:20
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

La forma de hacerlo recursividad es asumir siempre que ya tiene una función de trabajo en la mano. Así que veamos [usando la sintaxis de Java] ...

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

Supongamos que funciona. Luego haría u necesita hacer para construir un árbol en el índice i?

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

Eso es básicamente la misma. Es necesario para cuidar de los casos extremos: de índice = Array.length, creación del primer nodo, y similares

Respondida el 24/03/2011 a las 02:27
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more