Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BoniElProgramador

#1
Lo del limitLeftOrRight = 5 es porque estaba probando cosas realmente antes lo tenia

limitLeftOrRight = limitLeftOrRight * limitLeftOrRight ;

Debido a que había observado que en el primer piso son 4 nodos a rellenar, de los cuales al llegar a la mitad había que cambiar de lado, en el segundo son 8, pero entraba en mi función 16 veces.. etc

Son cosas que se me ocurren y voy probando para ver como actua mi programa  ;D ;D ;D

Voy a trabajar con dicha recursiva que seguramente sea mas sencillo para que mi cabeza no entre en bucle infinito  :xD

#2
Lo del padre lo borre.. porque no me convencia para nada, actualmente el codigo que me gustaria modificar porque me ha dado un poco mejor resultado es el siguiente:

Código (cpp) [Seleccionar]

void insertNode(BT &tree, int x)
{


if (tree == NULL)
{
tree = createNode(x);
}
else
{
if (tree->left == NULL)
{
insertNode(tree->left, x);
tree->left->parent = tree;
}
else if (tree->right == NULL)
{
insertNode(tree->right, x);
tree->right->parent = tree;
}
else
{
                            if (changeLeftRight)
{
insertNode(tree->left, x);
leftOrRight++;
if (leftOrRight == limitLeftOrRight) //(tree->left->right != NULL)
{
changeLeftRight = false;
leftOrRight = 0;
}
}
else if (!changeLeftRight)
{
insertNode(tree->right, x);
leftOrRight++;
if (leftOrRight == limitLeftOrRight)//(tree->right->right != NULL)
{
changeLeftRight = true;
leftOrRight = 0;
limitLeftOrRight = 5;
}
}
                        }
                }
}
#3
Gracias por contestar Ivan, me gustaría utilizar la recursiva porque como decía lo de intentar contar nodos ya lo he probado y hay un momento en el que es mi cabeza la que entra en bucle infinito, pero no se como empezar a usarla necesitaría un poco mas de informacion
#4
Un arbol binario se rellena de izquierda a derecha segun tengo entendido, primero la rama izquierda luego la derecha, si esa rama esta llena pasaremos a la segunda rama, rellenando hijo izquierdo e hijo derecho y asi sucesivamente hasta llenar el "piso" y bajar la profundidad.

Se que tengo que poner algo en el insertNode
despues de
         else if (tree->right == NULL)
                                 {
                                        ....
                                 }


He probado cosas y llego hasta el segundo piso, pero de una manera muy manual, me gustaria usar recursividad o algo así para que si mi archivo tiene 500 números insertarlos en un arbol de manera correcta


Engel Lex tomo nota!! Perdon  :o :o

P.D. pensaba que estaba borrando el post de arriba y le he debido quitar reputación......   :¬¬ :¬¬
#5
Buenas tardes casi noches,

este es mi primer post en este foro asi que si cometo algun error pido perdon  :D

bueno alli voy, resulta que tengo el reto de hacer un programa el cual lea datos de un archivo y los inserte en un Arbol Binario, insisto en lo de Arbol binario y no Arbol binario de busqueda.

Mi problema viene cuando al insertar los datos solo me rellena los 3 primeros nodos.

A continuacion mi codigo:

Código (cpp) [Seleccionar]
struct binaryTree
{
int nro;
struct binaryTree *left;
struct binaryTree *right;
};

bool ProcessDataFromFile(char filename)
{
ifstream F(filename);
int num;

while (!F.eof())
{
F >> num;
cout << "numero :" << num << endl;
createNode(num);
insertNode(btTree, num);
}
return 1;
}

BT createNode(int x)
{
BT newNode = new (struct binaryTree);
newNode->nro = x;
newNode->left = NULL;
newNode->right = NULL;
newNode->parent = NULL;

return newNode;
}

//Insertar nodo
void insertNode(BT &tree, int x)
{


if (tree == NULL)
{
tree = createNode(x);
}
else
{
if (tree->left == NULL)
{
insertNode(tree->left, x);
tree->left->parent = tree;
}
else if (tree->right == NULL)
{
insertNode(tree->right, x);
tree->right->parent = tree;
}
{



Gracias de antemano, un saludo
P.D. hay partes del codigo que no he puesto porque no vienen al tema


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex