Skip to content

Instantly share code, notes, and snippets.

@wmoralesdev
Created January 31, 2022 17:45
Show Gist options
  • Save wmoralesdev/62b6e08daf62e04f82eb16b2312928be to your computer and use it in GitHub Desktop.
Save wmoralesdev/62b6e08daf62e04f82eb16b2312928be to your computer and use it in GitHub Desktop.
BST Implementation in C++
#include <iostream>
using namespace std;
struct node {
int data;
node* left;
node* right;
node() {
left = NULL;
right = NULL;
}
node(int _data) {
data = _data;
left = NULL;
right = NULL;
}
};
int main(void) {
node* tree;
}
void insertInBst(node** tree, int data) {
if ((*tree) == NULL) {
*tree = new node(data);
return;
}
else {
if (data <= (*tree)->data) {
insertInBst(&(*tree)->left, data);
}
else {
insertInBst(&(*tree)->right, data);
}
}
}
void deleteFromBst(node** tree, int key) {
if ((*tree) == NULL) {
return;
}
else {
// Buscar el elemento a eliminar
if (key < (*tree)->data) {
deleteFromBst(&(*tree)->left, key);
}
else if(key > (*tree)->data) {
deleteFromBst(&(*tree)->right, key);
}
else {
// Eliminacion
// 1. Si el nodo es hoja (0 hijos)
if ((*tree)->left == NULL && (*tree)->right == NULL)
free(*tree);
// 2. Si el nodo tiene 1 hijo
// 2.1 Si el hijo es hijo izquierdo
if ((*tree)->left != NULL && (*tree)->right == NULL) {
*tree = (*tree)->left;
}
// 2.2
else if((*tree)->left == NULL && (*tree)->right != NULL) {
*tree = (*tree)->right;
}
// 3. El nodo tiene 2 hijos
else {
int inOrderSuccesor = getInOrderSuccesor((*tree)->right);
(*tree)->data = inOrderSuccesor;
deleteFromBst(&(*tree)->right, inOrderSuccesor);
}
}
}
}
int getInOrderSuccesor(node* tree) {
while(tree->left != NULL) {
tree = tree->left;
}
return tree->data;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment