DS Lab 7

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 14

DS LAB 7

TREE TRAVERSAL METHODS (RECURSIVE)

#include <stdio.h>

#include <stdlib.h>

struct node

int a;

struct node *left;

struct node *right;

};

void generate(struct node **, int);

void infix(struct node *);

void postfix(struct node *);

void prefix(struct node *);

void delete(struct node **);

int main()

struct node *head = NULL;

int choice = 0, num, flag = 0, key;

do

{
printf("\nEnter your choice:\n1. Insert\n2. Traverse via infix\n3.Traverse via prefix\n4. Traverse via
postfix\n5. Exit\nChoice: ");

scanf("%d", &choice);

switch(choice)

case 1:

printf("Enter element to insert: ");

scanf("%d", &num);

generate(&head, num);

break;

case 2:

infix(head);

break;

case 3:

prefix(head);

break;

case 4:

postfix(head);

break;

case 5:

delete(&head);

printf("Memory Cleared\nPROGRAM TERMINATED\n");

break;

default: printf("Not a valid input, try again\n");

} while (choice != 5);


return 0;

void generate(struct node **head, int num)

struct node *temp = *head, *prev = *head;

if (*head == NULL)

*head = (struct node *)malloc(sizeof(struct node));

(*head)->a = num;

(*head)->left = (*head)->right = NULL;

else

while (temp != NULL)

if (num > temp->a)

prev = temp;

temp = temp->right;

else

prev = temp;
temp = temp->left;

temp = (struct node *)malloc(sizeof(struct node));

temp->a = num;

if (num >= prev->a)

prev->right = temp;

else

prev->left = temp;

void infix(struct node *head)

if (head)

infix(head->left);

printf("%d ", head->a);

infix(head->right);

}
void prefix(struct node *head)

if (head)

printf("%d ", head->a);

prefix(head->left);

prefix(head->right);

void postfix(struct node *head)

if (head)

postfix(head->left);

postfix(head->right);

printf("%d ", head->a);

void delete(struct node **head)

if (*head != NULL)

{
if ((*head)->left)

delete(&(*head)->left);

if ((*head)->right)

delete(&(*head)->right);

free(*head);

OUTPUT FOR TREE TRAVERSAL METHODS (RECURSIVE)

Enter your choice:

1. Insert

2. Traverse via infix

3.Traverse via prefix

4. Traverse via postfix

5. Exit

Choice: 1

Enter element to insert: 2

Enter your choice:

1. Insert
2. Traverse via infix

3.Traverse via prefix

4. Traverse via postfix

5. Exit

Choice: 1

Enter element to insert: 4

Enter your choice:

1. Insert

2. Traverse via infix

3.Traverse via prefix

4. Traverse via postfix

5. Exit

Choice: 2

2 4

Enter your choice:

1. Insert

2. Traverse via infix

3.Traverse via prefix

4. Traverse via postfix

5. Exit

Choice:

TREE TRAVERSAL METHODS ( NON-RECURSIVE)


#include <stdio.h>

#include <stdlib.h>

struct node

int a;

struct node *left;

struct node *right;

};

void generate(struct node **, int);

int search(struct node *, int);

void delete(struct node **);

int main()

struct node *head = NULL;

int choice = 0, num, flag = 0, key;

do

printf("\nEnter your choice:\n1. Insert\n2. Search\n3. Exit\nChoice: ");

scanf("%d", &choice);

switch(choice)

{
case 1:

printf("Enter element to insert: ");

scanf("%d", &num);

generate(&head, num);

break;

case 2:

printf("Enter key to search: ");

scanf("%d", &key);

flag = search(head, key);

if (flag)

printf("Key found in tree\n");

else

printf("Key not found\n");

break;

case 3:

delete(&head);

printf("Memory Cleared\nPROGRAM TERMINATED\n");

break;

default: printf("Not a valid input, try again\n");

} while (choice != 3);


return 0;

void generate(struct node **head, int num)

struct node *temp = *head, *prev = *head;

if (*head == NULL)

*head = (struct node *)malloc(sizeof(struct node));

(*head)->a = num;

(*head)->left = (*head)->right = NULL;

else

while (temp != NULL)

if (num > temp->a)

prev = temp;

temp = temp->right;

else

prev = temp;
temp = temp->left;

temp = (struct node *)malloc(sizeof(struct node));

temp->a = num;

if (num >= prev->a)

prev->right = temp;

else

prev->left = temp;

int search(struct node *head, int key)

while (head != NULL)

if (key > head->a)

head = head->right;

else if (key < head->a)


{

head = head->left;

else

return 1;

return 0;

void delete(struct node **head)

if (*head != NULL)

if ((*head)->left)

delete(&(*head)->left);

if ((*head)->right)

delete(&(*head)->right);

free(*head);

}
}

OUTPUT FOR TREE TRAVERSAL(NON-RECURSIVE)

Enter your choice:

1. Insert

2. Search

3. Exit

Choice: 1

Enter element to insert: 2

Enter your choice:

1. Insert

2. Search

3. Exit

Choice: 1

Enter element to insert: 5

Enter your choice:

1. Insert

2. Search

3. Exit

Choice: 2

Enter key to search: 5

Key found in tree


Enter your choice:

1. Insert

2. Search

3. Exit

Choice:

You might also like