zoukankan      html  css  js  c++  java
  • C++中序线索化二叉树

      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 }


     

  • 相关阅读:
    Jquery(智能感知AJAX,从后台调数据)
    jQuery插件(输入关键字出现提示,并可查询)
    设置缓存失效的三种方法
    关于fluorinefx基础和服务器搭建的文章地址
    关于过河问题的感悟
    .net 大文件上传
    iis7中运行cmd
    学习总结
    C#开源资源项目(转载)
    HTML数据提取
  • 原文地址:https://www.cnblogs.com/xxdfly/p/4480308.html
Copyright © 2011-2022 走看看