resueltos recorrido por podar niveles imprimir fuente ejercicios ejemplos codigo busqueda binarios binario arboles arbol c++ function insert tree binary

recorrido - Implementación de árbol binario C++



podar arbol en c (2)

No debe insertar a ciegas, siga la lógica a continuación. Si x.value es menor que el valor raíz, intente insertar a la izquierda. Si x.value es> = root.value, vaya a la derecha. Repite esta lógica hasta que toques un valor NULL. Ese será el lugar adecuado para insertar su elemento.

Podrías voltear la lógica, simplemente elegí "left" en <porque menos que un poco hace una flecha a la izquierda. <-: P

TreeNode *root = this; TreeNode *parent = root; //Traverse the tree, go left if x.val < , else go right(>=) while(root) { parent = root; root = (root->value > x.value) ? root->left : root->right; } if(parent->value > x->value) parent->left = x; else parent->right = x;

Si no le importa ordenar, haga una primera búsqueda en profundidad con una cola.

queue<TreeNode*> nodes; nodes.push(this); while(1) { if(!nodes.front()->left) { nodes.front()->left = x; return; } else if (!nodes.front()->right) { nodes.front()->right = x; return; } nodes.push(nodes.front()->left); nodes.push(nodes.front()->right); nodes.pop(); }

He estado intentando implementar un árbol de búsqueda binario en C ++ por diversión. Mi problema es que estoy teniendo problemas con mi función de inserción. Debajo está lo que tengo hasta ahora:

class TreeNode{ public: int data; TreeNode *left; TreeNode *right; void Insert(int value, TreeNode *x); void TreeNode::Print(TreeNode *x); TreeNode(); }; TreeNode::TreeNode(){ left = NULL; right = NULL; }

.

void TreeNode::Insert(int value, TreeNode *x){ if(x->left == NULL && x->right == NULL){ TreeNode *tree = new TreeNode(); tree->datavalue; x->left = tree; } else if(x->left == NULL && x->right != NULL){ TreeNode *tree = new TreeNode(); tree->data = value; x->left = tree; } else if(x->left != NULL && x->right == NULL){ TreeNode *tree = new TreeNode(); tree->data = value; x->right = tree; } else if(x->left != NULL && x->right != NULL){ ?????? } }


Si desea insertar cuando tanto el hijo izquierdo como el derecho NO son nulos, entonces puede insertar el elemento moviéndolo recursivamente al nodo situado más a la izquierda del árbol. Y dado que solo está insertando valores sin un orden en particular, será difícil hacer un seguimiento. Más bien implemente un árbol de búsqueda binaria en ese caso.

else if(x->left != NULL && x->right != NULL){ Insert(value,x->left); x-> data = value; x->left = x->right = NULL; }

Y lo más importante, inserte un caso BASE para salir de la recursión.