蜜汁看不懂线索二叉树的遍历算法

说明:文章内容来自课程课件!

如果已经通过遍历(前序,中序或后序)得到线索二叉树。

那么,对线索化的二叉树进行遍历就比对一般二叉树进行遍历更加有效和方便。

 全线索二叉树的遍历算法

结束的条件?  树空或者指针指向头结点

②  中序遍历的第一个结点 ?左子树上处于“最左下”(没有左子树)的结点

③  在中序线索二叉树中结点的后继 ?

无右子树,右线索所指结点为后继  否则,右子树的“最左下”孩子为后继;

说明:

  typedef enum PointerThr{ Link, Thread } ;   // Link==0:指针,Thread==1:线索

void InOrderTraverse_Thr(BiThrTree T, void (*Visit)(TElemType e)) {
  p = T->lchild;       // T指向头结点,p指向根结点
  while (p != T) {     // 空树或遍历结束时,p==T
     while (p->LTag==Link)  p = p->lchild;  // 最左下结点
     Visit(p->data) ;       // 访问最左下结点
     while (p->RTag==Thread && p->rchild !=T)
          {p = p->rchild;  Visit(p->data); } // 访问后继结点         
      p = p->rchild;          // p进至其右子树根或头结点
  }
} // InOrderTraverse_Thr

最大的疑问是为什么根据这样执行就可以遍历整个二叉树???

欢迎评论和指点!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值