数据结构 6.12知识点-----二叉树的遍历,线索二叉树

二叉树的遍历
1、按根、左子树和右子树三部分进行遍历
TLR(根左右)、LTR(左根右)和LRT(左右根)根据根访问的位置不同分别被称为先序遍历、中序遍历和后序遍历。

2、 按层次遍历二叉树
实现方法为从上层到下层,每层中从左侧到右侧依次访问每个结点。下面我们将给出一棵二叉树及其按层次顺序访问其中每个结点的遍历序列。

根据先序和中序,中序和后序可以唯一确定一颗二叉树。
标空的先序、后序遍历序列可以唯一确定一颗二叉树。(关键是看能否确定根和左右子树)

二叉树中序遍历的非递归算法

在这里插入图片描述
代码:
p=b;
while (栈不空或者p!=NULL)
{
while (p!=NULL)
{ 将p进栈;
p=p->lchild;
}
//以下考虑栈顶结点
if (栈不空)
{ 出栈p并访问之;
   p=p->rchild;
}
}

栈中结点均没有访问
p指向刚刚出栈结点的右子树
栈空且p=NULL结束

在这里插入图片描述
线索二叉树

遍历二叉树实质上是对一个非线性结构进行线性化操作的过程,同时要注意怎样保存这种在遍历过程中得到的信息。
在每个结点上增加两个指针域(此时为三叉链),分别指示结点在任一次序遍历时得到的前驱和后继信息,使得存储密度大大降低。
有n个结点的二叉链表中必定存在n+1个空链域
这样的指向该线性序列中的“前驱”和“后继”的指针,称作线索(thread)。

结点存储结构
在这里插入图片描述
线索化二叉树中结点的类型定义如下:
typedef struct node
{ ElemType data; //结点数据域
int ltag,rtag; //增加的线索标记
struct node *lchild; //左孩子或线索指针
struct node *rchild; //右孩子或线索指针
} BiThrNode,*BiThrTree; //线索树结点类型定义

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值