数据结构c++线索链表的操作

1.二叉链表的线索化

template<typename DataType>
void InThrBiTree<DataType>::ThrBiTree(ThrNode<DataType>*bt,ThrNode<DataType>*pre)
{
    
    
   if(bt==nullptr)return;
   ThrBiTree(bt->lchild,pre);
   if(bt->lchild==nullptr)
   {
    
    
      bt->ltag=1;
      bt->lchild=pre;
   }
   if(bt->rchild==nullptr)bt->rtag=1;
   if(pre->rtag==1)pre->rchild=bt;
   pre=bt;
   ThrBiTree(bt->rchild,pre);
}

2.二叉链表的查找后继结点

template<typename DataType>
ThrNode<DataType>*InThrBiTree<DataType>::Next(ThrNode<DataType>*p)
{
    
    
   ThrNode<DataType>*q=nullptr;
   if(p->rtag==1)q=p->rchild;
   else{
    
    
      q=p->rchild;
      while(q->ltag==0)
         q=q->lchild;
       }
       return q;
}

3.中序遍历

template<typename DataType>
void InThrBiTree<DataType>::InOrder()
{
    
    
   if(root==nullptr)return;
   ThrNode<DataType>*p=root;
   while(p->ltag==0)
     p=p->lchild;
   cout<<p->data;
   while(p->rchild!=nullptr)
   {
    
    
     p=Next(p);
     cout<<p->data;
   }
}  

猜你喜欢

转载自blog.csdn.net/qq_51344334/article/details/119916545
今日推荐