要实现线索二叉树,就必须定义二叉链表结点数据结构如下(定义请看代码):
Lnode |
Ltag |
Data |
Rtag |
Rnode |
说明:
1. Ltag=0时,表示Lnode指向该结点的左孩子;
2. Ltag=1时,表示Lnode指向该结点的线性前驱结点;
3. Rtag=0时,表示Rnode指向该结点的右孩子;
4. Rnode时,表示Rnode指向该结点的线性后继结点;
以二叉链表结点数据结构所构成的二叉链表作为二叉树的存储结构,叫做线索二叉链表;指向结点的线性前驱或者线性后继结点的指针叫做线索;加上线索的二叉树称为线索二叉树;对二叉树以某种次序遍历将其变为线索二叉树的过程叫做线索化。
中序次序线索化二叉树算法:
中序次序线索化是指用二叉链表结点数据结构建立二叉树的二叉链表,然后按照中序遍历的方法访问结点时建立线索;(具体看代码)
检索中序二叉树某结点的线性前驱结点的算法:
1. 如果该结点的Ltag=1,那么Lnode就是它的线性前驱;
2. 如果该结点的Ltag=0,那么该结点左子树最右边的尾结点就是它的线性前驱点;
(具体请看代码)
检索中序二叉树某结点的线性后继结点和算法:
1. 如果该结点的Rtag=1,那么Rnode就是它的线性后继结点;
2. 如果该结眯的Rtag=0,那么该结点右子树最左边的尾结点就是它的线性后继结点
(具体请看代码)
解决方案中所有到二叉树的中序线索二叉树和中序线索链表的图
解决方案源码
推荐看另一篇随笔:二叉树遍历算法实现(C#2.0)
http://www.cnblogs.com/xuanfeng/archive/2006/09/20/509897.html