Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //přidání, za/před konkrétní prvek, smazání prvku před/za, modifikace dat, vyvážení stromu
- typedef struct t_Node {
- int key;
- struct t_Node *left;
- struct t_Node *right;
- } t_Node_t;
- t_Node_t *newNode(int item) //creating new node
- {
- t_Node_t *tmp = (t_Node_t *)malloc(sizeof(t_Node_t));
- tmp->key = item;
- tmp->left = tmp->right = NULL;
- return tmp;
- }
- void inord_trav(t_Node_t *root) //inorder traversal w/recursion
- {
- if(root != NULL) {
- inord_trav(root->left);
- printf("%d\n", root->key);
- inord_trav(root->right);
- }
- }
- t_Node_t *insert_key(t_Node_t *node, int given_key) //inserting node with given data value
- {
- if(node == NULL) {
- return newNode(given_key);
- }
- if(given_key < node->key) {
- node->left = insert_key(node->left, given_key);
- }
- else if(given_key > node->key) {
- node->right = insert_key(node->right, given_key);
- }
- return node;
- }
- t_Node_t *find_MinValue(t_Node_t *node) //finding node with minimal value => topmost left leaf of the tree
- {
- t_Node_t *current = node;
- while(current && current->left != NULL) {
- current = current->left;
- }
- return current;
- }
- t_Node_t *del_node(t_Node_t *root, int marker)
- {
- if(root == NULL) {
- return root;
- }
- if(marker < root->key) {
- root->left = del_node(root->left, marker);
- }
- else if(marker > root->key) {
- root->right = del_node(root->right, marker);
- }
- else {
- if(root->left == NULL) {
- t_Node_t *tmp = root->right;
- free(root);
- root = NULL;
- return tmp;
- }
- else if(root->right == NULL) {
- t_Node_t *tmp = root->left;
- free(root);
- root = NULL;
- return tmp;
- }
- t_Node_t *tmp = find_MinValue(root->right);
- root->key = tmp->key;
- root->right = del_node(root->right, tmp->key);
- }
- return root;
- }
- int main()
- {
- t_Node_t *root = NULL;
- //creating root
- root = insert_key(root, 50);
- //creating childs
- insert_key(root, 30);
- insert_key(root, 20);
- insert_key(root, 40);
- insert_key(root, 70);
- insert_key(root, 60);
- insert_key(root, 80);
- //print in inorder traversal
- printf("Inorder traversal of the given tree\n\n");
- inord_trav(root);
- //deleting 20
- printf("\nDelete 20\n");
- root = del_node(root, 20);
- printf("\nPrinting modified tree\n\n");
- inord_trav(root);
- //deleting 30
- printf("\nDelete 30\n");
- root = del_node(root, 30);
- printf("\nPrinting modified tree\n\n");
- inord_trav(root);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement