215 lines
4.7 KiB
C
215 lines
4.7 KiB
C
/*
|
|
* C Program to Find the Summation of Node values at level/row and print it
|
|
*/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
struct btnode
|
|
{
|
|
int value;
|
|
struct btnode *r,*l;
|
|
}*root = NULL, *temp = NULL;
|
|
|
|
void create();
|
|
void insert();
|
|
void add(struct btnode *t);
|
|
void computesum(struct btnode *t);
|
|
void display();
|
|
|
|
int count = 0, sum[100] = {0}, max = 0;
|
|
|
|
void main()
|
|
{
|
|
int ch;
|
|
printf("\n OPERATIONS ---");
|
|
printf("\n 1] Insert an element into tree");
|
|
printf("\n 2] Display the sum of the elements at the same level");
|
|
printf("\n 3] Exit ");
|
|
while (1)
|
|
{
|
|
printf("\nEnter your choice : ");
|
|
scanf("%d", &ch);
|
|
switch (ch)
|
|
{
|
|
case 1:
|
|
insert();
|
|
break;
|
|
case 2:
|
|
count = 0;
|
|
max = 0;
|
|
computesum(root);
|
|
display();
|
|
break;
|
|
case 3:
|
|
exit(0);
|
|
default :
|
|
printf("Wrong choice, Please enter correct choice ");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* To create a new node with the data from the user */
|
|
void create()
|
|
{
|
|
int data;
|
|
printf("Enter the data of node : ");
|
|
scanf("%d", &data);
|
|
temp = (struct btnode* ) malloc(1*(sizeof(struct btnode)));
|
|
temp->value = data;
|
|
temp->l = temp->r = NULL;
|
|
}
|
|
|
|
/* To check for root node and then create it */
|
|
void insert()
|
|
{
|
|
create();
|
|
if (root == NULL)
|
|
root = temp;
|
|
else
|
|
add(root);
|
|
}
|
|
|
|
/* Search for the appropriate position to insert the new node */
|
|
void add(struct btnode *t)
|
|
{
|
|
if ((temp->value > t->value) && (t->r != NULL)) /* value more than root node value insert at right */
|
|
add(t->r);
|
|
else if ((temp->value > t->value) && (t->r == NULL))
|
|
t->r = temp;
|
|
else if ((temp->value < t->value) && (t->l != NULL)) /* value less than root node value insert at left */
|
|
add(t->l);
|
|
else if ((temp->value < t->value) && (t->l==NULL))
|
|
t->l = temp;
|
|
}
|
|
|
|
/* Function to find the sum of nodes at same distance */
|
|
void computesum(struct btnode *t)
|
|
{
|
|
if (root == NULL)
|
|
{
|
|
printf("Tree is empty ");
|
|
return;
|
|
}
|
|
if (t->l != NULL)
|
|
{
|
|
count++;
|
|
computesum(t->l);
|
|
}
|
|
sum[count] = sum[count] + t->value; /* addition of elelment by row wise */
|
|
if (max < count)
|
|
max = count;
|
|
if (t->r != NULL)
|
|
{
|
|
count++;
|
|
computesum(t->r);
|
|
}
|
|
count--;
|
|
}
|
|
|
|
/* To display the sum of the nodes at the same distance */
|
|
void display()
|
|
{
|
|
int i;
|
|
printf("Sum of nodes : \n Level \t Sum ");
|
|
for (i = 0; i <= max; i++)
|
|
printf("\n %d \t: %d ", i, sum[i]);
|
|
}
|
|
|
|
/*
|
|
|
|
OPERATIONS ---
|
|
1] Insert an element into tree
|
|
2] Display the sum of the elements at the same level
|
|
3] Exit
|
|
Enter your choice : 1
|
|
Enter the data of node : 40
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 20
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 60
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 10
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 30
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 80
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 90
|
|
|
|
Enter your choice : 2
|
|
Sum of nodes :
|
|
Level Sum
|
|
0 : 40
|
|
1 : 80
|
|
2 : 120
|
|
3 : 90
|
|
Enter your choice : 3
|
|
|
|
40
|
|
/\
|
|
/ \
|
|
20 60
|
|
/ \ \
|
|
10 30 80
|
|
\
|
|
90
|
|
|
|
$ ./a.out
|
|
|
|
OPERATIONS ---
|
|
1] Insert an element into tree
|
|
2] Display the sum of the elements at the same level
|
|
3] Exit
|
|
Enter your choice : 1
|
|
Enter the data of node : 50
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 30
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 20
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 40
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 35
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 100
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 70
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 120
|
|
|
|
Enter your choice : 1
|
|
Enter the data of node : 140
|
|
|
|
Enter your choice : 2
|
|
Sum of nodes :
|
|
Level Sum
|
|
0 : 50
|
|
1 : 130
|
|
2 : 250
|
|
3 : 175
|
|
Enter your choice : 3
|
|
|
|
|
|
|
|
50
|
|
/\
|
|
/ \
|
|
30 100
|
|
/ \ / \
|
|
20 40 70 120
|
|
/ \
|
|
35 140
|