演算法線索二叉樹的建立和遍歷

dongyu2013發表於2014-04-21

點選(此處)摺疊或開啟

  1. typedef struct BiThrNode
  2. {
  3.     char data;
  4.     struct BiThrNode *lchild, *rchild;
  5.     PointerTag LTag;
  6.     PointerTag RTag;
  7. }BiThrNode, *BiThrTree;

  8. BiThrTree pre;

  9. void InThreading(BiThrTree p)          //建立
  10. {
  11.    if(p)
  12.    {
  13.      InThreading(p->lchild);
  14.      if(!p->lchild)
  15.      {
  16.          p->LTag=Thread;
  17.          p->lchild=pre;
  18.      }
  19.      if(!pre->rchild)
  20.      {
  21.          pre->RTag=Thread;
  22.          pre->rchild=p;
  23.      }
  24.      pre=p;
  25.        InThreading(p->rchild);
  26.    }
  27. }

  28. bool InOrderTraverse_Thr(BiThrTree T)  //遍歷
  29. {
  30.     BiThrTree p;
  31.     p=T->lchild;
  32.     while(p!=T)
  33.     {
  34.         while(p->LTag==Link)
  35.         {
  36.             p=p->lchild;
  37.         }
  38.         cout<<p->data;
  39.         while(p->RTag==Thread&&p->rchild!=T)
  40.         {
  41.             p=p->rchild;
  42.             cout<<p->data;
  43.         }
  44.         p=p->rchild;
  45.     }
  46.     return true;
  47. }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1145881/,如需轉載,請註明出處,否則將追究法律責任。

相關文章