[C con Clase] Problema en Arbol con 3 Nodos
Salvador Pozo Coronado
salvador en conclase.net
Vie Mar 15 20:54:36 CET 2013
Estimado Alejandro,
Con fecha miércoles, 13 de marzo de 2013, 22:58:24, escribió:
AF> Hola amigos, estoy intentando llenar 1 Arbol de tres
AF> nodos a lo maximo, tengo 1 funcion para insertar los
AF> nodos al arbol:
Hola:
Disculpa el retraso, me ha costado analizar el programa y comprender
el propósito de cada método. :)
No estoy seguro, pero creo que el problema está en el método
"treeContains"
Supongamos que tenemos un árbol (simplificando) de este tipo:
root
|
Alfabeto
/ |
Reading Writing
/
Speed1
Ahora tenemos que añadir un nodo "Speed2" como hijo de "Speed1", por
lo tanto llamamos a treeContains(root, "Speed1")
La primera llamada hace una llamada recursiva con:
treeContains(alfabeto, "Speed1");
La segunda llamada hace una tercera llamada recursiva con:
treeContains(reading, "Speed1");
Ahora vamos paso a paso, porque aquí está el error:
- root no es NULL
- la cadena en reading no es "Speed1".
- root->left no es NULL pero la cadena en root->left sí es "Speed1",
por lo que no se cumple el if (que debería haberse cumplido, ya que
esta es la rama adecuada para continuar.
- tampoco se cumplen los if restantes, por lo tanto, se retorna NULL,
y el nodo no se inserta en el punto adecuado, sino que se crea un
nuevo árbol.
Habría que modificar la función:
TreeNode* SkillTree::treeContains( TreeNode *root, char* parentName )
{
if (root==NULL) {
return NULL;
}
else if ( strcmp(parentName, root->item.getName())==0 ) {
return root;
}
else if ( root->left!=NULL)
{
return treeContains( root->left, parentName );
}
else if (root->middle !=NULL) {
return treeContains( root->middle, parentName );
}
else if (root->right!=NULL) {
return treeContains( root->right, parentName );
}
return NULL;
}
En cualquier caso, no tomes esta versión al pié de la letra, porque
tampoco estoy seguro de que funcione, ya que no he podido probarla. Lo
que sí estoy seguro es que la versión que has enviado no funciona
bien.
Hasta pronto.
--
Saludos,
Salvador mailto:salvador en conclase.net
Con Clase: http://www.conclase.net
Más información sobre la lista de distribución Cconclase