C/C++ code/*************************************************************
*
* operate BitTree
*
************************************************************/
#include
#include
#include
typedef struct BitNode
{
char ele;
struct BitNode *lchild;
struct BitNode *rchild;
}*BitTree;
typedef struct stack
{
BitTree BTP;
struct stack *next;
}*stackP;
int i=0;
//according to picture 6.8
char bitTreeArr[]={'A','B','C','#','#','D','E','#','G','#','#','F','#','#','#'};
void FinOrderTraverse(BitTree p)
{
if(p!=NULL)
{
FinOrderTraverse(p->lchild);
FinOrderTraverse(p->rchild);
printf("%c ",p->ele);
}
}
->void pushInStack(stackp *head,BitTree p)
{
stackp sp;
if((sp=malloc(sizeof(struct stack)))==NULL)
{
printf("overflow,malloc failed in pushInStack.\n");
exit(1);
}
if(*head==NULL)
{
*head=sp;
}
else
{
sp->next=*head;
*head=sp;
}
}
->void popStack(stackp *head,BitTree *p)
{
stackp sp;
sp=*head;
*head=sp->next;
*p=sp->BTP;
free(sp);
}
void MidInorderTraverse(BitTree p)
{
stackP head=NULL;
while(p!=NULL || head!=NULL)
{
if(p)
{
pushInStack(&head,p);
p=p->lchild;
}
else
{
popStack(&head,&p);
printf("%c ",p->ele);
p=p->rchild;
}
}
}
void MidOrderTraverse(BitTree p)
{
if(p!=NULL)
{
MidOrderTraverse(p->lchild);
printf("%c ",p->ele);
MidOrderTraverse(p->rchild);
}
}
void PreOrderTraverse(BitTree p)
{
if(p!=NULL)
{
printf("%c ",p->ele);
PreOrderTraverse(p->lchild);
PreOrderTraverse(p->rchild);
}
}
void createBitTree(BitTree *BT)
{
if(i
{
if(bitTreeArr[i]=='#')
{
*BT=NULL;
i++;
}
else
{
if(((*BT)=malloc(sizeof(struct BitNode)))==NULL)
{
printf("overflow,malloc failed in createBitTree.\n");
exit(1);
}
(*BT)->ele=bitTreeArr[i];
i++;
createBitTree(&(*BT)->lchild);
createBitTree(&(*BT)->rchild);
}
}
}
int main()
{
void createBitTree(BitTree *p);
void PreOrderTraverse(BitTree p);
void MidOrderTraverse(BitTree p);
void FinOrderTraverse(BitTree p);
->void pushInStack(stackp *head,BitTree p);
->void popStack(stackp *head,BitTree *p);
void MidInorderTraverse(BitTree p);
BitTree head;
createBitTree(&head); //create BitTree
printf("BitTree nodes print in preOrder are:");
PreOrderTraverse(head); //preOrder traverse BitTree
printf("\n");
printf("BitTree nodes print in midOrder are:");
MidOrderTraverse(head); //midOrder traverse BitTree
printf("\n");
printf("BitTree nodes print in finOrder are:");
FinOrderTraverse(head); //finOrder traverse BitTree
printf("\n");
printf("BitTree nodes print in midInOrder are:");
MidInorderTraverse(head);
printf("\n");
}