bintree

 
#include <stdio.h>
#include "bintree.h"
#include "stacka.h"

static int *value;
static int *left;
static int *middle;
static int *right;

void SetBT(int* V,int* L,int* R){
     value=V;
     left=L;
     right=R;
}

void SetTT(int* V,int* L,int *M,int* R){
     value=V;
     left=L;
     middle=M;
     right=R;
}

void inorder(int root){
     if(left[root]!=0)inorder(left[root]);
     printf("%d ",value[root]);
     if(right[root]!=0)inorder(right[root]);
}

void preorder(int root){
     printf("%d ",value[root]);
     if(left[root]!=0)preorder(left[root]);
     if(right[root]!=0)preorder(right[root]);
}

void postorder(int root){
     if(left[root]!=0)postorder(left[root]);
     if(right[root]!=0)postorder(right[root]);
     printf("%d ",value[root]);
}

void inorderNR(int v){
     Stack S;
     S = CreateStack( 12 );
LT:  while(left[v]!=0){
           Push(v,S);
           v=left[v];
         }
NODE:printf("%d ",value[v]);
     if(right[v]!=0){
          v=right[v];
          goto LT;
          }
     if(!IsEmpty(S)){
          v=Top(S);
          Pop(S);
          goto NODE;
     }
     DisposeStack( S );
}

void preorderNR(int v){
     Stack Tree;
     Tree = CreateStack( 10 );
     
 LEFT: while (left[v] != NULL){
         printf("%d ",value[v]);
         Push(v,Tree);
         v = left[v];
     }
     printf("%d ",value[v]);
     
NODE: if (right[v] != NULL){
         v = right[v];
         goto LEFT;
     }
     
     if (!IsEmpty(Tree)){
         v = Top(Tree);
         Pop(Tree);
         goto NODE;
     }
     
     DisposeStack( Tree ); 
}


void preorderTT(int root){
     printf("%d ",value[root]);
     if(left[root]!=0)preorder(left[root]);
     if(middle[root]!=0)preorder(middle[root]);
     if(right[root]!=0)preorder(right[root]);
}

void postorderTT(int root){
     if(left[root]!=0)postorder(left[root]);
     if(middle[root]!=0)postorder(middle[root]);
     if(right[root]!=0)postorder(right[root]);
     printf("%d ",value[root]);
}