线索二叉树

    线索二叉树,线索二叉树的基本概念,遍历二叉树就是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到二叉树结点的各种遍历序列。其实实质就是对一个非线性结构进行线性化操作,使得在这个访问序列中每一个结点(除第一个和最后一个)都有一个直接前驱和直接后继。
   传统的链式存储仅能体现一种父子关系,不能直接得到的结点在遍历中的前驱和后继,通过观察,我们发现在二叉链表表示的二叉树中存在大量的空指针,若利用这些空链表存放指向或直接前驱或后继指针,则可以更方便的地运用某些二叉树操作算法,引入线索二叉树是为了加快查找结点前驱和后继的速度前面提到,在有N个结点的二叉树中,有N+1个空指针。这是因为每一个叶结点有2个空指针,而每一个度为1的结点有1个空指针。
   以上这种结点结构构成的二叉树链表作为二叉树的存储结构,叫做线索链表,其中指向结点前驱和后继的指针,叫做线索。加上线索的二叉树称为线索二叉树,对二叉树以某种次序遍历使其为线索二叉树的过程叫做线索化 。
   线索二叉树的构造,对于二叉树的线索化,实质上就是遍历一次二叉树,只是在遍历的过程中,检查当前结点左,右指针域是否为空,若为空,将他们改为指向前驱结点或者后继结点的线索。以中序线索二叉树的建立为例,指针pre指向中序遍历时上一个刚刚访问过的结点,用它来表示各结点访问的前后关系。
   为了方便,仿照线性表的存储结构,在二叉树的线索链表上也添加一个头结点,令其指针指向二叉树的根结点,其指针指向中序遍历时访问的最后一个结点。反之,令二叉树中序序列的第一个结点的指针和最后一个结点的指针均指向头节点。这好比为二叉树建立了一个双向线索链表,既可以从第一个结点起顺后继进行遍历,也可以从最后一个结点起顺前驱进行遍历。
   线索二叉树的遍历,中序线索化二叉树主要是为访问运算服务的,这种遍历不再需要借助栈,因为它的结点中隐含了线索二叉树的前驱和后继信息。利用线索二叉树,可以实现二叉树遍历的非递归算法,不含头结点的线索二叉树的遍历算法如下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值