From 316ab0ea4af651f850e18f1ba77238031dcf0fc9 Mon Sep 17 00:00:00 2001 From: shikhar9820 <36673214+shikhar9820@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:04:00 +0530 Subject: [PATCH] Create c++ recursive spiral level order tree traversal --- ...ecursive spiral level order tree traversal | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Recursive Algorithms/DFS/c++ recursive spiral level order tree traversal diff --git a/Recursive Algorithms/DFS/c++ recursive spiral level order tree traversal b/Recursive Algorithms/DFS/c++ recursive spiral level order tree traversal new file mode 100644 index 000000000..bc6b824fe --- /dev/null +++ b/Recursive Algorithms/DFS/c++ recursive spiral level order tree traversal @@ -0,0 +1,110 @@ +// Recursive C program for level order traversal of Binary Tree +#include +#include + +/* A binary tree node has data, pointer to left child + and a pointer to right child */ +struct node +{ + int data; + struct node* left, *right; +}; + +/* Function protoypes */ +void printGivenLevel(struct node* root, int level,int counter); +int height(struct node* node); +struct node* newNode(int data); + +/* Function to print level order traversal a tree*/ +void printLevelOrder(struct node* root) +{ + int h = height(root); + int i,j; + for (i=1; i<=h; i++){ + j=i; + printGivenLevel(root,i,j); +} +} +/* Print nodes at a given level */ +void printGivenLevel(struct node* root, int level ,int counter) +{ + if (root == NULL) + return; + if (level == 1) + printf("%d ", root->data); + + else if (level > 1 && (counter%2)!=0) + { + printGivenLevel(root->right, level-1,counter); + printGivenLevel(root->left, level-1,counter); + } + + else + { + printGivenLevel(root->left, level-1,counter); + printGivenLevel(root->right, level-1,counter); + } +} + +/* Compute the "height" of a tree -- the number of + nodes along the longest path from the root node + down to the farthest leaf node.*/ +int height(struct node* node) +{ + if (node==NULL) + return 0; + else + { + /* compute the height of each subtree */ + int lheight = height(node->left); + int rheight = height(node->right); + + /* use the larger one */ + if (lheight > rheight) + return(lheight+1); + else return(rheight+1); + } +} + +/* Helper function that allocates a new node with the + given data and NULL left and right pointers. */ +struct node* newNode(int data) +{ + struct node* node = (struct node*) + malloc(sizeof(struct node)); + node->data = data; + node->left = NULL; + node->right = NULL; + + return(node); +} + +/* Driver program to test above functions*/ +int main() +{ + struct node *root = newNode(1); + root->left = newNode(2); + root->right = newNode(3); + root->right->left = newNode(1); + root->right->right= newNode(9); + root->left->left = newNode(4); + root->left->right = newNode(5); + root->left->left->left = newNode(6); + root->left->right->left = newNode(8); + root->left->right->left->left= newNode(0); + + root->left->right->left->right= newNode(3); + root->left->right->left->right->left= newNode(7); + root->left->right->left->right->right= newNode(5); + root->left->right->left->right->left->left= newNode(9); + root->left->right->left->right->left->right= newNode(6); + + + printf("Level Order traversal of binary tree is \n"); +/*int l; + l=height(root); +printf("%d",l); + */ + printLevelOrder(root); + return 0; +}