• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中序线索化二叉树

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  1 #include <iostream>
  2 using namespace std;
  3 
  4 typedef struct TBTNode
  5 {
  6     char data;
  7     int ltag,rtag;
  8     struct TBTNode * lchild;
  9     struct TBTNode * rchild;
 10 }TBTNode;
 11 
 12 TBTNode * initTBTNode()
 13 {
 14     TBTNode * p=(TBTNode*)malloc(sizeof(TBTNode));
 15     p->lchild=0;
 16     p->rchild=0;
 17     p->ltag=0;
 18     p->rtag=0;
 19     return p;
 20 }
 21 
 22 TBTNode * initTBTree(TBTNode * p)
 23 {
 24     TBTNode * A=initTBTNode();
 25     TBTNode * B=initTBTNode();
 26     TBTNode * C=initTBTNode();
 27     TBTNode * D=initTBTNode();
 28     TBTNode * E=initTBTNode();
 29 
 30     A->data='A';
 31     B->data='B';
 32     C->data='C';
 33     D->data='D';
 34     E->data='E';
 35 
 36     A->lchild=B;
 37     A->rchild=C;
 38     B->rchild=D;
 39     C->lchild=E;
 40 
 41     p=A;
 42 
 43     return p;
 44 }
 45 
 46 void InThread(TBTNode *p,TBTNode *&pre)
 47 {
 48     if(p!=0)
 49     {
 50         InThread(p->lchild,pre);
 51         if(p->lchild==0)
 52         {
 53             p->lchild=pre;
 54             p->ltag=1;
 55         }
 56         if(pre!=0&&pre->rchild==0)
 57         {
 58             pre->rchild=p;
 59             pre->rtag=1;
 60         }
 61         pre=p;
 62         InThread(p->rchild,pre);
 63     }
 64 }
 65 
 66 TBTNode * First(TBTNode * p)
 67 {
 68     while(p->ltag==0)
 69         p=p->lchild;
 70     return p;
 71 }
 72 
 73 TBTNode * Next(TBTNode * p)
 74 {
 75     if(p->rtag==0)
 76         return First(p->rchild);
 77     else
 78         return p->rchild;
 79 }
 80 
 81 void Inorder(TBTNode * root)
 82 {
 83     for(TBTNode *p=First(root);p!=0;p=Next(p))
 84         cout << p->data << " ";
 85     cout << endl;
 86 }
 87 
 88 void createInThread(TBTNode * root)
 89 {
 90     TBTNode * pre =initTBTNode();
 91     if(root!=0)
 92     {
 93         InThread(root,pre);
 94         pre->rchild=0;
 95         pre->rtag=1;
 96     }
 97 }
 98 
 99 int main(int argc, char* argv[])
100 {
101     TBTNode *p=initTBTNode();
102     p=initTBTree(p);
103     TBTNode *pre=initTBTNode();
104     createInThread(p);
105     Inorder(p);
106     return 0;
107 }


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#将普通字符串转换为二进制字符串发布时间:2022-07-14
下一篇:
c#中类和对象详解c#中类和对象详解发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap