严蔚敏 数据结构 算法6.5

来源:互联网 发布:ff14拉拉菲尔捏脸数据 编辑:程序博客网 时间:2024/05/16 11:15
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef enum PointerTag {Link,Thread}PointerTag;
typedef struct BiThrNode{
  char data;
  struct BiThrNode *lchild,*rchild;
  PointerTag LTag,RTag;
}BiThrNode,*BiThrTree;

int InOrderTraverse_Thr(BiThrTree T){
  BiThrTree p;
  p=T->lchild;
  while(p!=T){
    while(p->LTag==Link) p=p->lchild;
    printf("%c",p->data);
    while(p->RTag==Thread && p->rchild!=T){
      p=p->rchild;
      printf("%c",p->data);
    }
    p=p->rchild;
    }
  printf("\n");
  return 1;
}

int main(void){
  BiThrTree L,A,B,C,D,E,F,G,H,I,J,K;
  L=(BiThrTree)malloc(sizeof(BiThrNode));
  A=(BiThrTree)malloc(sizeof(BiThrNode));
  B=(BiThrTree)malloc(sizeof(BiThrNode));
  C=(BiThrTree)malloc(sizeof(BiThrNode));
  D=(BiThrTree)malloc(sizeof(BiThrNode));
  E=(BiThrTree)malloc(sizeof(BiThrNode));
  F=(BiThrTree)malloc(sizeof(BiThrNode));
  G=(BiThrTree)malloc(sizeof(BiThrNode));
  H=(BiThrTree)malloc(sizeof(BiThrNode));
  I=(BiThrTree)malloc(sizeof(BiThrNode));
  J=(BiThrTree)malloc(sizeof(BiThrNode));
  K=(BiThrTree)malloc(sizeof(BiThrNode));
 
  L->LTag=0;L->lchild=A;L->RTag=1;L->rchild=G;
  A->LTag=0;A->RTag=0;A->lchild=B;A->rchild=C;A->data='-';
  B->LTag=0;B->RTag=0;B->lchild=D;B->rchild=E;B->data='+';
  C->LTag=0;C->RTag=0;C->lchild=F;C->rchild=G;C->data='/';
  D->LTag=1;D->RTag=1;D->lchild=L;D->rchild=B;D->data='a';
  E->LTag=0;E->RTag=0;E->lchild=H;E->rchild=I;E->data='*';
  F->LTag=1;F->RTag=1;F->lchild=A;F->rchild=C;F->data='e';
  G->LTag=1;G->RTag=1;G->lchild=C;G->rchild=L;G->data='f';
  H->LTag=1;H->RTag=1;H->lchild=B;H->rchild=E;H->data='b';
  I->LTag=0;I->RTag=0;I->lchild=J;I->rchild=K;I->data='-';
  J->LTag=1;J->RTag=1;J->lchild=E;J->rchild=I;J->data='c';
  K->LTag=1;K->RTag=1;K->lchild=I;K->rchild=A;K->data='d';

  InOrderTraverse_Thr(L);
  return 1;
}

0 0
原创粉丝点击