zoukankan      html  css  js  c++  java
  • 5)二叉树[2]二叉树中序线索化

      1 #include "iostream"
      2 #include "stdlib.h"
      3 using namespace std;
      4 
      5 typedef char type;
      6 struct bnode{
      7     type data;
      8     bnode *lchild,*rchild;
      9     int rtag,ltag;
     10 };
     11 
     12 const int lrtag = 0;
     13 class thbtree{
     14 public:
     15     thbtree();//初始化
     16     ~thbtree();
     17     void create_thbtree(bnode *&T);//建立二叉树
     18     void inorder(bnode *T);//先序遍历
     19     bnode *in_thread(bnode *&T);
     20     void inthread(bnode *p,bnode *&pre);
     21 
     22 private:
     23     int count;//元素个数统计
     24 };
     25 
     26 thbtree::thbtree()//初始化
     27 {
     28     count = 0;
     29 }
     30 
     31 void thbtree::create_thbtree(bnode *&T)//建立二叉树
     32 {
     33     type ch;
     34     cin>>ch;
     35     if(ch=='.')T=NULL;
     36     else {
     37         T = new bnode;
     38         T->data = ch;
     39         T->ltag = lrtag;
     40         T->rtag = lrtag;
     41         count++;
     42         create_thbtree(T->lchild);
     43         create_thbtree(T->rchild);
     44     }
     45 }
     46 
     47 void thbtree::inthread(bnode *p,bnode *&pre)
     48 {
     49     if(p)
     50     {
     51         inthread(p->lchild,pre);//左子树线索化
     52         if(!p->lchild)//如果p的左子树为空,给P点加前驱线索
     53         {
     54             p->ltag = 1;
     55             p->lchild = pre;
     56         }else{
     57             p->ltag = 0;
     58         }
     59         if(pre && !pre->rchild)
     60         {
     61             pre->rtag = 1;
     62             pre->rchild = p;
     63         }
     64         pre = p;
     65         inthread(p->rchild,pre);//右子树线索化
     66     }
     67 }
     68 bnode *thbtree::in_thread(bnode *&T)
     69 {
     70     bnode *pre = NULL;
     71     bnode *head;
     72     head =  new bnode;
     73     head->ltag = 0;
     74     head->rtag = 1;
     75     head->lchild = head;
     76     if(!T)
     77     {
     78         head->lchild = head;
     79     }else{
     80         head->lchild = T;
     81         pre = head;
     82         inthread(T,pre);
     83         pre->rchild = head;
     84         pre->rtag=1;
     85         head->rchild = pre;
     86     }
     87     T =head;
     88     return head;
     89 }
     90 
     91 
     92 void thbtree::inorder(bnode*T)//中序遍历
     93 {
     94     bnode *p;
     95     p = T->lchild;
     96     while(p!=T)
     97     {
     98         while(p->ltag==0)
     99         {
    100             p=p->lchild;
    101         }
    102         cout<<p->data<<" ";
    103         while(p->rtag==1&&p->rchild!=T)
    104         {
    105             p = p->rchild;
    106             cout<<p->data<<" ";
    107         }
    108         p = p->rchild;
    109     }
    110 }
    111 
    112 thbtree::~thbtree(){}
    113 
    114 int main()
    115 {
    116     thbtree Tree;
    117     bnode *T;
    118     cout<<"Create Tree:";
    119     Tree.create_thbtree(T);
    120     cout<<"Tree finished!"<<endl;
    121     Tree.in_thread(T);
    122     cout<<"INorder Tree:";
    123     Tree.inorder(T);
    124     cout<<endl;
    125     return 0;
    126 }
  • 相关阅读:
    【WPF】 Prism 框架中,TabControl 作为Region时如何设置Header
    【WPF】将控件事件中的参数,传递到ViewModel中
    WPF 一种带有多个子集的类ComBox 解决方法
    WPF TabControl美化
    【WPF】 问题总结-RaidButton修改样式模板后作用区域的变化
    C# 打开Excel文件
    获取文件夹下所有的文件名
    访问需要HTTP Basic Authentication认证的资源的c#的实现 将账号密码放入url
    第十三章 建造者模式(Builder)
    第十二章 外观模式 (Facade)
  • 原文地址:https://www.cnblogs.com/minmsy/p/5029428.html
Copyright © 2011-2022 走看看