// Recursive C program for level order traversal of Binary Tree#include <stdio.h>#include <stdlib.h>/* 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 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; for (i=1; i<=h; i++) printGivenLevel(root, i);}/* Print nodes at a given level */void printGivenLevel(struct node* root, int level){ if (root == NULL) return; if (level == 1) printf("%d ", root->data); else if (level > 1) { printGivenLevel(root->left, level-1); printGivenLevel(root->right, level-1); }}/* 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->left->left = newNode(4); root->left->right = newNode(5); printf("Level Order traversal of binary tree is \n"); printLevelOrder(root); return 0;}Output:
Level order traversal of binary tree is -
1 2 3 4 5
Time Complexity: O(n^2) in worst case. For a skewed tree, printGivenLevel() takes O(n) time where n is the number of nodes in the skewed tree. So time complexity of printLevelOrder() is O(n) + O(n-1) + O(n-2) + .. + O(1) which is O(n^2).
No comments:
Post a Comment