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