binary tree_ exercise

increase_up · November 13, 2024
#include <stdio.h>
#include <stdlib.h>

typedef struct Node *treePointer;

typedef struct Data {
    int key;
} Data;

typedef struct Node {
    Data data;
    treePointer left;
    treePointer right;
} Node;

treePointer createNode(int key) {
    treePointer node = (treePointer)malloc(sizeof(Node));
    node->data.key = key;

    node->left = NULL;
    node->right = NULL;
    return node;
}

treePointer insert(treePointer *root, int key) { 
    if (*root == NULL) 
       *root = createNode(key);

    else if (key < (*root)->data.key) 
       (*root)->left = insert(&(*root)->left, key); 
    else if (key > (*root)->data.key) 
       (*root)->right = insert(&(*root)->right, key);

    return *root; 
}

treePointer deleteNode (treePointer root, int key) {
   
   if (root == NULL) return NULL;
   else if (key < root->data.key)
      root -> left_child = deleteNode(root ->left_child, key);
   else if (key > root ->data.key) {
      root -> right_child = deleteNode (root -> right_child, key);
   else {
      if (root -> left_child == NULL && root -> right_child == NULL)
         root = NULL;
      else if (root ->left_child == NULL)
         root = root -> right_child;
      else if (root -> right_child == NULL)
         root = root -> left_child;
      else {
         treePointer tempNode = findMinimum(current->right_child);
         currentNode -> data.key = tempNode -> data.key;
         currentNode -> right_child = deleteNode(currentNode -> right_child, tempNode->data.key);
      }
   }

   return currentNode;
}


int main(){
    int data, cnt = 5;
    treePointer root = NULL;
    
    while (cnt > 0) {
        scanf("%d", &data);
        root = insert(&root,data);
        cnt--;
    }
    
    while(cnt < 5){
        printf("%d", root->data.key);
        root = root->left;
        cnt++;
    }
}
Output

Comments

Please sign up or log in to contribute to the discussion.