## Saturday, 10 October 2015

### Finding Preorder, Inorder and Postorder of binary tree in C Language

In this post, we will see sample program in C language to find preorder, inorder and postorder traversal of binary tree.
Preorder, inorder, postorder traversal follows the following traversal.
Preorder Traversal: Root-Left-Right
Inorder Traversal: Left-Root-Right
Postorder Traversal: Left-Right-Root

Go through the following program:

Program: (treetraversal.c)
 #include#include/* We will consider Strict Binary Tree where each node has zero or two children */struct binarytree{char data;struct binarytree *left, *right;};typedef struct binarytree node;/* insertnode() and insert() functions are for adding nodes to tree */void insertnode(node **tree,char val){node *temp = NULL;if(!(*tree))    {        temp = (node *)malloc(sizeof(node));        temp->left = temp->right = NULL;        temp->data = val;        *tree = temp;    }}void insert(node **tree,char val){    char l,r;    int numofchildren;    insertnode(tree, val);    printf("\nEnter number of children of %c:",val);    scanf("%d",&numofchildren);  if(numofchildren==2)   {    printf("\nEnter Left Child of %c:",val);    scanf("%s",&l);    insertnode(&(*tree)->left,l);    printf("\nEnter Right Child of %c:",val);    scanf("%s",&r);    insertnode(&(*tree)->right,r);      insert(&(*tree)->left,l);    insert(&(*tree)->right,r);   }}/* function preorder() will print preorder of nodes. */void preorder(node * tree){    if (tree)    {        printf("%c  ",tree->data);    preorder(tree->left);        preorder(tree->right);    }}/* function inorder() will print inorder of nodes. */void inorder(node * tree){    if (tree)    {        inorder(tree->left);        printf("%c  ",tree->data);        inorder(tree->right);    }}/* function postorder() will print inorder of nodes. */void postorder(node * tree){    if (tree)    {        postorder(tree->left);        postorder(tree->right);    printf("%c  ",tree->data);    }}/* deletetree() will free the memory allocated for tree */void deletetree(node * tree){    if (tree)    {        deletetree(tree->left);        deletetree(tree->right);        free(tree);    }}/* Program execution will start from main() function */void main(){    node *root;    root = NULL;    node *tmp;    char val;    int i,temp;       /* Inserting nodes into tree(DAG) */    printf("\nEnter root of tree:");    scanf("%c",&val);    insert(&root,val);    /* Printing preorder of nodes of tree(DAG) */    printf("\nPreorder Display:\n");    preorder(root);    /* Printing inorder of nodes of tree(DAG) */    printf("\nInorder Display:\n");    inorder(root);    /* Printing postorder of nodes of tree(DAG) */    printf("\nPostorder Display:\n");    postorder(root);    printf("\n");             /* Deleting all nodes of tree */    deletetree(root);}

How To Run:
To Compile:
>>>gcc treetraversal.c

To Run:
>>>./a.out

Output:
For above tree, Preorder, Inorder and Postorder will be found out as follows: