Upload files to "DS/C/Lab/LabEval"

This commit is contained in:
Aadit Agrawal 2024-10-22 10:30:56 +05:30
parent 5315639c58
commit b29550a72c

156
DS/C/Lab/LabEval/treepos.c Normal file
View File

@ -0,0 +1,156 @@
// construct binary tree with odd and even data counters
#include <stdio.h>
#include <stdlib.h>
int e,o,n;
// Define a TreeNode structure and use a typedef for convenience
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
TreeNode* insertNode(TreeNode* root, int data) {
if (root == NULL) {
return createNode(data);
}
if (data < root->data) {
root->left = insertNode(root->left, data);
} else if (data > root->data) {
root->right = insertNode(root->right, data);
}
return root;
}
TreeNode* findMinNode(TreeNode* root) {
while (root->left != NULL) {
root = root->left;
}
return root;
}
TreeNode* deleteNode(TreeNode* root, int key) {
if (root == NULL)
{
return NULL;
}
if (key < root->data)
{
root->left = deleteNode(root->left, key);
}
else if (key > root->data)
{
root->right = deleteNode(root->right, key);
}
else // root is found
{
if (root->left == NULL)
{
TreeNode* temp = root->right;
free(root);
return temp;
}
else if (root->right == NULL)
{
TreeNode* temp = root->left;
free(root);
return temp;
}
TreeNode* temp = findMinNode(root->right);
root->data = temp->data;
root->right = deleteNode(root->right, temp->data);
}
return root;
}
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
if(root->data >= 0){
if(root->data % 2 == 0){e++;}
if(root->data % 2 != 0){o++;}
}else{
n++;
}
}
}
void dispOddEven(){
printf("\nThe number of even nodes is %d.\n",e);
printf("The number of odd nodes is %d.\n",o);
if(n!=0){
printf("\nERROR: Negative Number encountered. Not considered in either odd or even.\n");
}
}
int main() {
TreeNode* root = NULL;
int choice, value;
printf("Elements are added to the tree in an inorder sequence.");
while (1) {
printf("\nMenu:\n");
printf("1. Insert a value\n");
printf("2. Delete a value\n");
printf("3. Odd and Event Count\n");
printf("4. Display the Tree (inorder traversal)\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter a value to insert: ");
scanf("%d", &value);
root = insertNode(root, value);
break;
case 2:
printf("Enter a value to delete: ");
scanf("%d", &value);
root = deleteNode(root, value);
break;
case 3:
printf("\nChecking for odd and even characters...\n");
e = 0; o = 0; n=0;
printf("In the given tree:\n");
inorderTraversal(root);
dispOddEven();
break;
case 4:
printf("Inorder traversal: ");
inorderTraversal(root);
printf("\n");
break;
case 5:
free(root); // Release memory
exit(0);
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}