/*  tbtree.c    CCMATH mathematics library source code.
 *
 *  Copyright (C)  2000   Daniel A. Atkinson    All rights reserved.
 *  This code may be redistributed under the terms of the GNU library
 *  public license (LGPL). ( See the lgpl.license file for details.)
 * ------------------------------------------------------------------------
 */
/*
    Test:  btins  btdel  tsearch  tsort  prtree

    Input file:  ttree.dat
*/
#include "ccmath.h"
struct trec {char key[2]; char rec[2];} tstor[128];
struct tnode head,*arp[28];
void main(int na,char **av)
{ struct tnode *hd= &head,*pt;
  int n; FILE *fp;
  if(na!=2){ printf("para: input_file\n"); exit(-1);}
  fp=fopen(*++av,"r");
  printf("     Test of Binary Tree Functions\n");

/* initialize head of binary tree */
  strcpy(tstor[0].key,"0");
  hd->key=tstor[0].key; hd->pl=hd->pr=NULL;
  for(n=1; fscanf(fp,"%s",tstor[n].key)!=EOF ;++n){

/* insert a node in the binary tree */
    pt=btins(tstor[n].key,hd);

   }

/* print the tree structure to level 5 */
  pt=hd->pr; prtree(pt,5);
/* print the left branch to level 5 */
  printf(" left branch\n"); prtree(pt->pl,5);

/* search the tree for node with key K and print subtree K */
  pt=tsearch("K",hd); printf(" K-branch\n"); prtree(pt,5);

/* delete nodes with keys H and T and print the new tree structure */
  btdel("H",hd); btdel("T",hd); pt=hd->pr; prtree(pt,5);

/* search again for node K and print the subtree starting at K */
  pt=tsearch("K",hd); printf(" K-branch\n"); prtree(pt,5);

/* sort the tree nodes */
  tsort(hd,arp);
  for(n=0; arp[n]!=NULL ;) printf("%s",arp[n++]->key); printf("\n");
}
/*  Test output

     Test of Binary Tree Functions
                                 X                               

                 T                               Z               

         B               U               Y                       

     A       F               V                                   

           C   K                                                 

            E H M                                                

 left branch
                                 T                               

                 B                               U               

         A               F                               V       

                     C       K                                   

                       E   H   M                                 

                      D   G J L Q                                

 K-branch
                                 K                               

                 H                               M               

         G               J               L               Q       

                     I                               P       R   

                                                   O           S 

                                                                 

                                 X                               

                 U                               Z               

         B               V               Y                       

     A       F                                                   

           C   K                                                 

            E I M                                                

 K-branch
                                 K                               

                 I                               M               

         G               J               L               Q       

                                                     P       R   

                                                   O           S 

                                                                 

0ABCDEFGIJKLMOPQRSUVXYZ
*/


syntax highlighted by Code2HTML, v. 0.9.1