CS13002 Programming and Data Structures

Section 3/C, Spring 2003--2004

Assignment 8


The exercise

Consider a binary tree with each node carrying a (unique) label. In-order and pre-order listings of these labels are defined by the following recursive procedures:

inorder ( node )
{
   if (node != NULL) {
      inorder(left child of node);
      print(label of node);
      inorder(right child of node);
   }
}

preorder ( node )
{
   if (node != NULL) {
      print(label of node);
      preorder(left child of node);
      preorder(right child of node);
   }
}
A binary tree and the in-order and pre-order listings of the labels of its nodes are shown in the following figure:

Inorder and preorder listings of a binary tree

Given the in-order and pre-order listings for a binary tree, the tree can be uniquely reconstructed using the following recursive algorithm:

construct ( inlist , prelist )
{
   if (inlist and prelist are both non-empty) {
      create a new node;
      set the label of the new node to be the first label of prelist;
      locate this label in inlist;
      let m be the number of labels in inlist before this location;
      let n be the number of labels in inlist after this location;
      let leftinlist be the first m labels of inlist;
      let rightinlist be the last n labels of inlist;
      let leftprelist be the second through (m+1)st labels of prelist;
      let rightprelist be the last n labels of prelist;
      left child of new node = construct (leftinlist, leftprelist);
      right child of new node = construct (rightinlist, rightprelist);
      return(new node);
   }
   return(NULL);
}

Implement this construct procedure. Read the inlist and prelist from the user, construct the tree and print it.

Sample output

Inorder listing  : bfdgaehc
Preorder listing : abdfgceh
Node : a, Left child :    b, Right child :    c.
Node : b, Left child : NULL, Right child :    d.
Node : d, Left child :    f, Right child :    g.
Node : f, Left child : NULL, Right child : NULL.
Node : g, Left child : NULL, Right child : NULL.
Node : c, Left child :    e, Right child : NULL.
Node : e, Left child : NULL, Right child :    h.
Node : h, Left child : NULL, Right child : NULL.

Test input

Show the output of your program on the following inputs:
Inorder listing  : GDHBAECF
Preorder listing : ABDGHCEF

Inorder listing  : abcdefghijkl
Preorder listing : abcdefghijkl

Inorder listing  : abcdefghijkl
Preorder listing : lkjihgfedcba

Inorder listing  : abcdefghijkl
Preorder listing : badcfehgjilk

Inorder listing  : cbafedihglkj
Preorder listing : abcdefghijkl

Inorder listing  : abcdefghijkl
Preorder listing : bcdefghijkla

Inorder listing  : bcdefghijkla
Preorder listing : abcdefghijkl

Inorder listing  : hdibjekalfmcngo
Preorder listing : abdhiejkcflmgno

Inorder listing  : ABCDEFGHIJKLMN
Preorder listing : HGFEDCBAIJKLMN

Inorder listing  : ABCDEFGHIJKLMN
Preorder listing : GABCDEFNMLKJIH


Lab home