Título: ayuda con un arbol binario Publicado por: Pipe99 en 25 Abril 2018, 03:07 am Buenas noches, estoy haciendo un programa en java que apartir de un String que tiene una operacion matematica por ejemplo "5+7*3-56/5+45". esto tiene que quedar en un arbol binario y luego resolverse. Yo tenia planeado contar cuantos signos hay y dividirlo en 2 para que el gigno de la mitad sea la raiz y con subString poner la parte derecha de signo en el hijo derecho y la izquierda en el hijo izquierdo y hacer recursividad hasta completar el arbol. pero el problema es que nose como obtener la posicion del signo de la mitad, por el momento solo se cuantos signos hay y pensaba hacer un arreglo que me guardara los numeros haciendo un split para que omita los signos
String x="785+6-7*4/4+9+445"; String separadores = "[\\+\\-\\*\\/]"; String z[] = x.split(separadores); for(int i=0;i<z.length();i++){ System.out.println(z); } con esto logro guardar en un espacio los numeros de varios digitos pero no se como meter los signos en ese arreglo. espero me haya echo entender y de antemano gracias por su ayuda. Código Título: Re: ayuda con un arbol binario Publicado por: rub'n en 26 Abril 2018, 00:43 am Ostia macho, tu descripción incomoda, bueno a mi algo,
Mmmm, Te refieres al signo del medio cual ? Código con esto logro guardar en un espacio los numeros de varios digitos pero no se como meter los signos en ese arreglo. espero me haya echo entender y de antemano gracias por su ayuda. con el método .insert() de la clase StringBuilder puedes meter esos signos que deseas en cualquier parte de tu StringCódigo Título: Re: ayuda con un arbol binario Publicado por: Serapis en 27 Abril 2018, 02:31 am 0 - El árbol binario que pides, al caso dado, se llama arbol sintáctico.
1 - La función split, no vale, porque corta por los caracteres pedidos, dejando fuera esos caracteres qe son los operadores. 2 - Además, el operador de asignación '=', lo quedas fuera. Lo mismo que a x. 'x' es una variable, que debe ser tratado exactamente igual que si fuera un número. 3 - Toda la operatoria debe ser un bucle, que recorra buscando bytes o caracteres, reconozca numeros/variables/identificadores (como en el siguiente ejemplo) por un lado y operadores por otro. Los paréntesis también son operadores, en este caso de prioridad (se resuelve lo que está dentro antes de resolver lo de más afuera). x = (j * k) + 5 - ((n * 7) + cantidad) 4- Debes considerar la prioridad de los operadores, a falta de paréntesis, se deben seguir las reglas de precedencia de operadores, y la estructura adecuada para mediar con el bucle y el árbol es una pila. 5 - Con un árbol sintáctico, los nodos terminales siempre contienen el operando (número, variable...) y los nodos internos contienen el operador, quedando el operador en medio de los operandos se conoce como notación infija 6 - Tal vez te interese seguir otro modelo. Revisa la notación polaca inversa, donde los 2 operandos quedan juntos antes del operador. nota: te he marcado en negrita, todo aquello que puedes buscar en google, para profundizar... |