给二叉树加中序线索

本文介绍了一种对二叉树进行中序线索化的方法,通过中序遍历二叉树并在遍历过程中利用空指针域添加线索,使得遍历效率得到提升。文章详细展示了如何在遍历过程中维护前驱节点,并利用这些信息建立节点间的线索连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//给二叉树加中序线索
//要得到中序线索二叉树,则只要对二叉树进行一次中序遍历,在遍历的过程中使用线索地带空的指针就可以
//实现思路 :先实现中序遍历,然后再添加 添加线索的代码
void inthread()
{
 int s[n0+1] ;  //栈
 int t;//栈指针
 int p = root; //当前节点的指针,被初始化为root
 int q = 0;

 while(p || t)
 {//当前节点不为空 或者 栈不为空
  if(p)
  {//如果当前节点不为空,把当前节点入栈,节点指到当前节点的左孩子
   s[++t] = p;
   p = tree[p].llink;
  }
  else
  {//如果当前节点为空
   p = s[t--]; //p为当前节点的父亲节点
   //cout<<tree[p].data ;//如果是中序遍历,就输出了
   //现在是加上线索
   if(q)
   {//q现在是p的前驱
    if(tree[q].rlink == 0)
    {//如果前驱的右节点为0,那么线索话
     tree[q].rlink = -p;  //后续
    }
    if(tree[p].llink == 0)
    {//如果当前节点的左节点为0.那么线索话
     tree[p].llink = -q;
    }
   }

   q = p;      //q也是当前节点的父亲节点
   p = tree[p].rlink ; //p是当前节点的父亲节点的右孩子

  }
 }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值