第十周项目一 3
来源:互联网 发布:手机竞猜源码 编辑:程序博客网 时间:2024/05/21 08:53
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #include <stdio.h>
- #include <malloc.h>
- #define MaxSize 100
- typedef char ElemType;
-
- typedef struct node
- {
- ElemType data;
- int ltag,rtag;
- struct node *lchild;
- struct node *rchild;
- } TBTNode;
-
- void CreateTBTNode(TBTNode * &b,char *str)
- {
- TBTNode *St[MaxSize],*p=NULL;
- int top=-1,k,j=0;
- char ch;
- b=NULL;
- ch=str[j];
- while (ch!='\0')
- {
- switch(ch)
- {
- case '(':
- top++;
- St[top]=p;
- k=1;
- break;
- case ')':
- top--;
- break;
- case ',':
- k=2;
- break;
- default:
- p=(TBTNode *)malloc(sizeof(TBTNode));
- p->data=ch;
- p->lchild=p->rchild=NULL;
- if (b==NULL)
- b=p;
- else
- {
- switch(k)
- {
- case 1:
- St[top]->lchild=p;
- break;
- case 2:
- St[top]->rchild=p;
- break;
- }
- }
- }
- j++;
- ch=str[j];
- }
- }
-
-
- void DispTBTNode(TBTNode *b)
- {
- if (b!=NULL)
- {
- printf("%c",b->data);
- if (b->lchild!=NULL || b->rchild!=NULL)
- {
- printf("(");
- DispTBTNode(b->lchild);
- if (b->rchild!=NULL) printf(",");
- DispTBTNode(b->rchild);
- printf(")");
- }
- }
- }
-
- TBTNode *pre;
-
- void Thread(TBTNode *&p)
- {
- if (p!=NULL)
- {
- Thread(p->lchild);
- if (p->lchild==NULL)
- {
- p->lchild=pre;
- p->ltag=1;
- }
- else p->ltag=0;
- if (pre->rchild==NULL)
- {
- pre->rchild=p;
- pre->rtag=1;
- }
- else pre->rtag=0;
- pre=p;
- Thread(p->rchild);
- }
- }
-
- TBTNode *CreaThread(TBTNode *b)
- {
- TBTNode *root;
- root=(TBTNode *)malloc(sizeof(TBTNode));
- root->ltag=0;
- root->rtag=1;
- root->rchild=b;
- if (b==NULL)
- root->lchild=root;
- else
- {
- root->lchild=b;
- pre=root;
- Thread(b);
- pre->rchild=root;
- pre->rtag=1;
- root->rchild=pre;
- }
- return root;
- }
-
- void ThInOrder(TBTNode *tb)
- {
- TBTNode *p=tb->lchild;
- while (p!=tb)
- {
- while (p->ltag==0) p=p->lchild;
- printf("%c ",p->data);
- while (p->rtag==1 && p->rchild!=tb)
- {
- p=p->rchild;
- printf("%c ",p->data);
- }
- p=p->rchild;
- }
- }
-
-
- int main()
- {
- TBTNode *p1,*p2;
-
- CreateTBTNode(p1,"A(B(D(,G)),C(E,F))");
- printf("普通二叉树:");
-
- DispTBTNode(p1);
- printf("\n");
- p2=CreaThread(p1);
-
- printf("线索二叉树:");
-
- ThInOrder(p2);
-
- return 0;
-
-
-
-
-
- }
学习心得: