CS13002 Programming and Data Structures

Section 3/C, Spring 2003--2004

Assignment 8 : Solution


The program

#include <stdio.h>
#include <string.h>

#define MAX_SIZE 100

typedef struct _node {
   char label;
   struct _node *L;
   struct _node *R;
} node;

node *gentree ( char *inlist , char *prelist )
{
   node *head;
   char *inp, *prep, ch;

   if ((strlen(inlist)==0)||(strlen(prelist)==0)) return(NULL);

   head = (node *)malloc(sizeof(node));
   head->label = prelist[0];
   inp = strchr(inlist,prelist[0]);
   if (inp == NULL) {
      free(head);
      fprintf(stderr, "Malformed expression(s)...\n");
      return(NULL);
   }
   *inp = '\0';
   prelist++;
   prep = prelist + strlen(inlist);
   ch = *prep;
   *prep = '\0';
   head->L = gentree(inlist,prelist);
   *prep = ch;
   inp++;
   head->R = gentree(inp,prep);
   return(head);
}

void printtree ( node *root )
{
   if (root == NULL) return;
   printf("Node : %c, ",root->label);
   printf("Left child : ");
   if (root->L == NULL) printf("NULL, ");
   else printf("   %c, ",root->L->label);
   printf("Right child : ");
   if (root->R == NULL) printf("NULL.\n");
   else printf("   %c.\n",root->R->label);
   printtree(root->L);
   printtree(root->R);
}

int main ()
{
   char inlist[MAX_SIZE], prelist[MAX_SIZE];
   node *root;

   printf("Inorder listing  : "); scanf("%s",inlist);
   printf("Preorder listing : "); scanf("%s",prelist);
   root = gentree(inlist,prelist);
   printtree(root);
}

Output

Inorder listing  : GDHBAECF
Preorder listing : ABDGHCEF
Node : A, Left child :    B, Right child :    C.
Node : B, Left child :    D, Right child : NULL.
Node : D, Left child :    G, Right child :    H.
Node : G, Left child : NULL, Right child : NULL.
Node : H, Left child : NULL, Right child : NULL.
Node : C, Left child :    E, Right child :    F.
Node : E, Left child : NULL, Right child : NULL.
Node : F, Left child : NULL, Right child : NULL.

Inorder listing  : abcdefghijkl
Preorder listing : abcdefghijkl
Node : a, Left child : NULL, Right child :    b.
Node : b, Left child : NULL, Right child :    c.
Node : c, Left child : NULL, Right child :    d.
Node : d, Left child : NULL, Right child :    e.
Node : e, Left child : NULL, Right child :    f.
Node : f, Left child : NULL, Right child :    g.
Node : g, Left child : NULL, Right child :    h.
Node : h, Left child : NULL, Right child :    i.
Node : i, Left child : NULL, Right child :    j.
Node : j, Left child : NULL, Right child :    k.
Node : k, Left child : NULL, Right child :    l.
Node : l, Left child : NULL, Right child : NULL.

Inorder listing  : abcdefghijkl
Preorder listing : lkjihgfedcba
Node : l, Left child :    k, Right child : NULL.
Node : k, Left child :    j, Right child : NULL.
Node : j, Left child :    i, Right child : NULL.
Node : i, Left child :    h, Right child : NULL.
Node : h, Left child :    g, Right child : NULL.
Node : g, Left child :    f, Right child : NULL.
Node : f, Left child :    e, Right child : NULL.
Node : e, Left child :    d, Right child : NULL.
Node : d, Left child :    c, Right child : NULL.
Node : c, Left child :    b, Right child : NULL.
Node : b, Left child :    a, Right child : NULL.
Node : a, Left child : NULL, Right child : NULL.

Inorder listing  : abcdefghijkl
Preorder listing : badcfehgjilk
Node : b, Left child :    a, Right child :    d.
Node : a, Left child : NULL, Right child : NULL.
Node : d, Left child :    c, Right child :    f.
Node : c, Left child : NULL, Right child : NULL.
Node : f, Left child :    e, Right child :    h.
Node : e, Left child : NULL, Right child : NULL.
Node : h, Left child :    g, Right child :    j.
Node : g, Left child : NULL, Right child : NULL.
Node : j, Left child :    i, Right child :    l.
Node : i, Left child : NULL, Right child : NULL.
Node : l, Left child :    k, Right child : NULL.
Node : k, Left child : NULL, Right child : NULL.

Inorder listing  : cbafedihglkj
Preorder listing : abcdefghijkl
Node : a, Left child :    b, Right child :    d.
Node : b, Left child :    c, Right child : NULL.
Node : c, Left child : NULL, Right child : NULL.
Node : d, Left child :    e, Right child :    g.
Node : e, Left child :    f, Right child : NULL.
Node : f, Left child : NULL, Right child : NULL.
Node : g, Left child :    h, Right child :    j.
Node : h, Left child :    i, Right child : NULL.
Node : i, Left child : NULL, Right child : NULL.
Node : j, Left child :    k, Right child : NULL.
Node : k, Left child :    l, Right child : NULL.
Node : l, Left child : NULL, Right child : NULL.

Inorder listing  : abcdefghijkl
Preorder listing : bcdefghijkla
Malformed expression(s)...
Malformed expression(s)...
Malformed expression(s)...
Malformed expression(s)...
Malformed expression(s)...
Malformed expression(s)...
Node : b, Left child : NULL, Right child :    d.
Node : d, Left child : NULL, Right child :    f.
Node : f, Left child : NULL, Right child :    h.
Node : h, Left child : NULL, Right child :    j.
Node : j, Left child : NULL, Right child :    l.
Node : l, Left child : NULL, Right child : NULL.

Inorder listing  : bcdefghijkla
Preorder listing : abcdefghijkl
Node : a, Left child :    b, Right child : NULL.
Node : b, Left child : NULL, Right child :    c.
Node : c, Left child : NULL, Right child :    d.
Node : d, Left child : NULL, Right child :    e.
Node : e, Left child : NULL, Right child :    f.
Node : f, Left child : NULL, Right child :    g.
Node : g, Left child : NULL, Right child :    h.
Node : h, Left child : NULL, Right child :    i.
Node : i, Left child : NULL, Right child :    j.
Node : j, Left child : NULL, Right child :    k.
Node : k, Left child : NULL, Right child :    l.
Node : l, Left child : NULL, Right child : NULL.

Inorder listing  : hdibjekalfmcngo
Preorder listing : abdhiejkcflmgno
Node : a, Left child :    b, Right child :    c.
Node : b, Left child :    d, Right child :    e.
Node : d, Left child :    h, Right child :    i.
Node : h, Left child : NULL, Right child : NULL.
Node : i, Left child : NULL, Right child : NULL.
Node : e, Left child :    j, Right child :    k.
Node : j, Left child : NULL, Right child : NULL.
Node : k, Left child : NULL, Right child : NULL.
Node : c, Left child :    f, Right child :    g.
Node : f, Left child :    l, Right child :    m.
Node : l, Left child : NULL, Right child : NULL.
Node : m, Left child : NULL, Right child : NULL.
Node : g, Left child :    n, Right child :    o.
Node : n, Left child : NULL, Right child : NULL.
Node : o, Left child : NULL, Right child : NULL.

Inorder listing  : ABCDEFGHIJKLMN
Preorder listing : HGFEDCBAIJKLMN
Node : H, Left child :    G, Right child :    I.
Node : G, Left child :    F, Right child : NULL.
Node : F, Left child :    E, Right child : NULL.
Node : E, Left child :    D, Right child : NULL.
Node : D, Left child :    C, Right child : NULL.
Node : C, Left child :    B, Right child : NULL.
Node : B, Left child :    A, Right child : NULL.
Node : A, Left child : NULL, Right child : NULL.
Node : I, Left child : NULL, Right child :    J.
Node : J, Left child : NULL, Right child :    K.
Node : K, Left child : NULL, Right child :    L.
Node : L, Left child : NULL, Right child :    M.
Node : M, Left child : NULL, Right child :    N.
Node : N, Left child : NULL, Right child : NULL.

Inorder listing  : ABCDEFGHIJKLMN
Preorder listing : GABCDEFNMLKJIH
Node : G, Left child :    A, Right child :    N.
Node : A, Left child : NULL, Right child :    B.
Node : B, Left child : NULL, Right child :    C.
Node : C, Left child : NULL, Right child :    D.
Node : D, Left child : NULL, Right child :    E.
Node : E, Left child : NULL, Right child :    F.
Node : F, Left child : NULL, Right child : NULL.
Node : N, Left child :    M, Right child : NULL.
Node : M, Left child :    L, Right child : NULL.
Node : L, Left child :    K, Right child : NULL.
Node : K, Left child :    J, Right child : NULL.
Node : J, Left child :    I, Right child : NULL.
Node : I, Left child :    H, Right child : NULL.
Node : H, Left child : NULL, Right child : NULL.


Lab home