Untitled

mail@pastecode.io avatar
unknown
plain_text
9 months ago
2.4 kB
1
Indexable
#include <stdio.h>
struct BinarySerchTreeNode{
    int data;
    struct BinarySerchTreeNode* left; //left child
    struct BinarySerchTreeNode* right; //right child
};

struct BinarySerchTreeNode* addData(int data){
    struct BinarySerchTreeNode* node =  malloc(sizeof(struct BinarySerchTreeNode));
    node->data = data;
    node->left = NULL;
    node->right = NULL;

    return node;
};

struct BinarySerchTreeNode* makeTree(){
    struct BinarySerchTreeNode* root = addData(6);

    struct BinarySerchTreeNode* rootLeft = addData(2);
    struct BinarySerchTreeNode* rootRight = addData(8);

    root->left = rootLeft;
    root->right = rootRight;

    struct BinarySerchTreeNode* rootLeftLeft = addData(1);
    struct BinarySerchTreeNode* rootRightRight = addData(4);

    rootLeft->left = rootLeftLeft;
    rootLeft->right = rootRightRight;

    struct BinarySerchTreeNode* rootLeftLeftLeft = addData(3);

    rootRightRight->left = rootLeftLeftLeft;

    return root;
}

struct BinarySerchTreeNode* findMin(struct BinarySerchTreeNode* node){
    if(node == NULL){
        return NULL;
    }
    else if(node->left == NULL){
        return (node);
    }
    else {
        return(findMin(node->left));
    }
}

struct BinarySerchTreeNode* deleteN(int data, struct BinarySerchTreeNode* node){
    struct BinarySerchTreeNode* deleteStore;
    struct BinarySerchTreeNode* child;
    if(node == NULL){

    }
    else if(data < node->data){
        node->left = deleteN(data,node->left);
    }
    else if(data > node->data){
        node->right = deleteN(data,node->right);
    }
    else if(node->left && node->right){
        deleteStore = findMin(node->right);
        node->data = deleteStore->data;
        node->right = deleteN(node->data,node->right);
    }
    else{
        deleteStore = node;
        if(node->left == NULL){
            child = node->right;
        }
        else if(node->right == NULL){
            child = node->left;
        }
        free(deleteStore);
        return child;
    }
    return node;
}

int main(){
    struct BinarySerchTreeNode* root = makeTree();
    deleteN(3,root);
    inOrderTraversal(root);
    return 0;
}

void inOrderTraversal(struct BinarySerchTreeNode* node){
    if(node == NULL) return;

    inOrderTraversal(node->left);
    printf("%d ", node->data);
    inOrderTraversal(node->right);
}
Leave a Comment