数据结构之线索二叉树



  typedef enum PointerTag{Link,Thread};
  typedef struct{
        char ch;
        int num;
  }ElemType;
  typedef struct{
    BiThrNode *lchild,*rchild;
    PointerTag Ltag,Rtag;
    ElemType data;
  }BiThrNode,*BiThree;


       //中序遍历记录线索二叉树
  void InThreading(BiThree &p,BiThree &pre){
           if(p){
                InThreading(p->lchild,pre);
                if(!(p->lchild)){
                      p->lchild=pre;
                      p->Ltag=Thread;
                  }
                if(!(pre->rchild)){
                      pre->Rtag=Thread;
                      pre->rchild=p;    
                 }        
                pre=p;
               InThreading(p->rchild,pre);
            }
      }


      //创建一个完整的线索二叉树
  int InorderThreading(BiThree &Thr,BiThree &T){
          BiThrNode *p,*pre;
          if(!Thr=(BiThree)malloc(sizeof(BiThrNode))) exit(1);
          Thr->rchild=Thr;
          Thr->Rtag=Thread;
          pre=Thr;
          if(!T){Thr->lchild=Thr;exit(1);}
          Thr->lchild=T;
          p=T;
          InThreading(p,pre);
          pre->rchild=Thr;
          pre->Rtag=Thread;
          Thr->rchild=pre;    
          return 0;
        }






      //非递归中序遍历线索二叉树。 
  int InOrderTraverse_Thr(BiThree &T){
          if(!T) exit(1);
          BiThrNode *p=T->lchild;  
          while(p!=T){
                 while(p->Ltag==Link)p=p->lchild;
                 if(visit(p)) return 1;
                 while(p->Rtag==Thread&&p->rchild!=T) 
                 {
                   p=p->rchild;
                   visit(p->rchild);
                 }
                 p=p->rchild;
             }
              return 0;
         }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
创建线索二叉树是一种对二叉树进行优化的数据结构。它的目的是为了加快二叉树的遍历速度。在传统的二叉树中,为了实现对二叉树的遍历,需要使用递归或者栈来实现。而线索二叉树通过添加线索,将二叉树的节点之间的遍历顺序进行编码,从而实现快速遍历。 在线索二叉树中,每个节点都有两个指针:左指针和右指针。在一棵二叉树中,如果一个节点没有左孩子,则将其左指针指向该节点的前驱节点。如果一个节点没有右孩子,则将其右指针指向该节点的后继节点。通过这样的线索指针,可以快速地找到一个节点的前驱和后继节点,进而实现对二叉树的快速遍历。 具体来说,在线索二叉树中,如果一个节点没有左孩子,则将其左指针指向其前驱节点;如果一个节点没有右孩子,则将其右指针指向其后继节点。通过这样的线索化过程,原本需要递归或者栈来实现的遍历过程,可以直接通过线索指针快速找到下一个需要遍历的节点,从而提高了遍历的效率。 总的来说,线索二叉树是一种优化的二叉结构,通过添加线索指针,将二叉树的节点之间的遍历顺序进行编码,从而实现了对二叉树的快速遍历。它的设计思想主要是通过设置节点的线索指针指向前驱和后继节点,提高了遍历效率,减少了递归或栈的使用。这是一个在实际应用中常用的数据结构,可以广泛应用于二叉树遍历的场景中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒徒词客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值