This project is about Binary Trees in C and other tree-type data structures.
- What is a binary tree
- What is the difference between a binary tree and a Binary Search Tree
- What is the possible gain in terms of time complexity compared to linked lists
- What are the depth, the height, the size of a binary tree
- What are the different traversal methods to go through a binary tree
- What is a complete, a full, a perfect, a balanced binary tree
Format for user to write in "main.c": main file
Example:
alex@/tmp/binary_trees$ cat 18-main.c
#include <stdlib.h>
#include <stdio.h>
#include "binary_trees.h"
/**
* main - Entry point
*
* Return: Always 0 (Success)
*/
int main(void)
{
binary_tree_t *root;
binary_tree_t *uncle;
root = binary_tree_node(NULL, 98);
root->left = binary_tree_node(root, 12);
root->right = binary_tree_node(root, 128);
root->left->right = binary_tree_node(root->left, 54);
root->right->right = binary_tree_node(root->right, 402);
root->left->left = binary_tree_node(root->left, 10);
root->right->left = binary_tree_node(root->right, 110);
root->right->right->left = binary_tree_node(root->right->right, 200);
root->right->right->right = binary_tree_node(root->right->right, 512);
binary_tree_print(root);
uncle = binary_tree_uncle(root->right->left);
printf("Uncle of %d: %d\n", root->right->left->n, uncle->n);
uncle = binary_tree_uncle(root->left->right);
printf("Uncle of %d: %d\n", root->left->right->n, uncle->n);
uncle = binary_tree_uncle(root->left);
printf("Uncle of %d: %p\n", root->left->n, (void *)uncle);
return (0);
}
alex@/tmp/binary_trees$ gcc -Wall -Wextra -Werror -pedantic binary_tree_print.c 18-main.c 18-binary_tree_uncle.c 0-binary_tree_node.c -o 18-uncle
alex@/tmp/binary_trees$ ./18-uncle
.-------(098)-------.
.--(012)--. .--(128)-------.
(010) (054) (110) .--(402)--.
(200) (512)
Uncle of 110: 12
Uncle of 54: 128
Uncle of 12: (nil)
alex@/tmp/binary_trees$
An ancestry chart which can be mapped to a perfect 4-level binary tree
Files | Description |
---|---|
0-binary_tree_node.c | C function that creates a binary tree node |
1-binary_tree_insert_left.c | C function that inserts a node as the left-child of another node |
2-binary_tree_insert_right.c | C function that inserts a node as the right-child of another node |
3-binary_tree_delete.c | C function that deletes an entire binary tree |
4-binary_tree_is_leaf.c | C function that checks if a node is a leaf |
5-binary_tree_is_root.c | C function that checks if a given node is a root |
6-binary_tree_preorder.c | C function that goes through a binary tree using pre-order traversal |
7-binary_tree_inorder.c | C function that goes through a binary tree using in-order traversal |
8-binary_tree_postorder.c | C function that goes through a binary tree using post-order traversal |
9-binary_tree_height.c | C function that measures the height of a binary tree |
10-binary_tree_depth.c | C function that measures the depth of a node in a binary tree |
11-binary_tree_size.c | C function that measures the size of a binary tree |
12-binary_tree_leaves.c | C function that counts the leaves in a binary tree |
13-binary_tree_nodes.c | C function that counts the nodes with at least 1 child in a binary tree |
14-binary_tree_balance.c | C function that measures the balance factor of a binary tree |
15-binary_tree_is_full.c | C function that checks if a binary tree is full |
16-binary_tree_is_perfect.c | C function that checks if a binary tree is perfect |
17-binary_tree_sibling.c | C function that finds the sibling of a node |
18-binary_tree_uncle.c | C function that finds the uncle of a node |
binary_tree_print.c | C function that prints a binary tree |
If you find any bug, please, let us know.
All files have been written in the Betty Style.