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]);
}