From 5467c54bf80f0d2f53205f1f463b3b3ebbb79322 Mon Sep 17 00:00:00 2001 From: aniket710 <84042263+aniket710@users.noreply.github.com> Date: Tue, 26 Oct 2021 21:36:12 +0530 Subject: [PATCH] Create Tree_traversal.c --- TREES/c or cpp/Tree_traversal.c | 142 ++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 TREES/c or cpp/Tree_traversal.c diff --git a/TREES/c or cpp/Tree_traversal.c b/TREES/c or cpp/Tree_traversal.c new file mode 100644 index 0000000..833b3cc --- /dev/null +++ b/TREES/c or cpp/Tree_traversal.c @@ -0,0 +1,142 @@ +#include +#include + +struct node { + int data; + + struct node *leftChild; + struct node *rightChild; +}; + +struct node *root = NULL; + +void insert(int data) { + struct node *tempNode = (struct node*) malloc(sizeof(struct node)); + struct node *current; + struct node *parent; + + tempNode->data = data; + tempNode->leftChild = NULL; + tempNode->rightChild = NULL; + + //if tree is empty + if(root == NULL) { + root = tempNode; + } else { + current = root; + parent = NULL; + + while(1) { + parent = current; + + //go to left of the tree + if(data < parent->data) { + current = current->leftChild; + + //insert to the left + if(current == NULL) { + parent->leftChild = tempNode; + return; + } + } //go to right of the tree + else { + current = current->rightChild; + + //insert to the right + if(current == NULL) { + parent->rightChild = tempNode; + return; + } + } + } + } +} + +struct node* search(int data) { + struct node *current = root; + printf("Visiting elements: "); + + while(current->data != data) { + if(current != NULL) + printf("%d ",current->data); + + //go to left tree + if(current->data > data) { + current = current->leftChild; + } + //else go to right tree + else { + current = current->rightChild; + } + + //not found + if(current == NULL) { + return NULL; + } + } + + return current; +} + +void pre_order_traversal(struct node* root) { + if(root != NULL) { + printf("%d ",root->data); + pre_order_traversal(root->leftChild); + pre_order_traversal(root->rightChild); + } +} + +void inorder_traversal(struct node* root) { + if(root != NULL) { + inorder_traversal(root->leftChild); + printf("%d ",root->data); + inorder_traversal(root->rightChild); + } +} + +void post_order_traversal(struct node* root) { + if(root != NULL) { + post_order_traversal(root->leftChild); + post_order_traversal(root->rightChild); + printf("%d ", root->data); + } +} + +int main() { + int i; + int array[7] = { 27, 14, 35, 10, 19, 31, 42 }; + + for(i = 0; i < 7; i++) + insert(array[i]); + + i = 31; + struct node * temp = search(i); + + if(temp != NULL) { + printf("[%d] Element found.", temp->data); + printf("\n"); + }else { + printf("[ x ] Element not found (%d).\n", i); + } + + i = 15; + temp = search(i); + + if(temp != NULL) { + printf("[%d] Element found.", temp->data); + printf("\n"); + }else { + printf("[ x ] Element not found (%d).\n", i); + } + + printf("\nPreorder traversal: "); + pre_order_traversal(root); + + printf("\nInorder traversal: "); + inorder_traversal(root); + + printf("\nPost order traversal: "); + post_order_traversal(root); + + return 0; +}