70,011
社区成员




- /*************************************************************
- *
- * operate BitTree
- *
- ************************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- 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<strlen(bitTreeArr))
- {
- 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");
- }
/*************************************************************
*
* operate BitTree
*
************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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);
}
sp->BTP=p;
if((*head)->BTP==NULL)
{
//printf("enter here\n");
*head=sp;
(*head)->next=NULL;
}
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;
if((head=malloc(sizeof(struct stack)))==NULL)
{
printf("overflow,malloc failed in createBitTree.\n");
exit(1);
}
head->BTP=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<strlen(bitTreeArr))
{
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");
}