一、线索化二叉树简介
1.线索二叉树:对于n个节点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该节点的前驱节点和后继节点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树
2.线索二叉树分类:这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
3.前驱结点:一个结点的前一个结点
4. 后继结点:一个结点的后一个结点
二、中序线索化二叉树逻辑结构示意图
说明:当线索化二叉树后,Node节点的属性left和right,有如下情况:
- left 指向的是左子树,也可能是指向的前驱节点。比如8节点left指向的左子树,而9节点的left指向的就是前驱节点2.
- right指向的是右子树, 也可能是指向后继节点.比如8节点right指向的是右子树,而节点的9的right指向的是后继节点8.
三、代码实现
1.查找前驱节点和后继节点
2.中序线索化遍历二叉树
package ThreadedBinaryTree;
public class ThreadedBinaryTreeTest {
public static void main(String[] args){
//创建节点对象
Node root8 = new Node(8);
Node data2 = new Node(2);
Node data6 = new Node(6);
Node data3 = new Node(3);
Node data9 = new Node(9);
Node data5 = new Node(5);
Node data1 = new Node(1);
//创建一个线索化二叉树
ThreadedBinaryTree tree =new ThreadedBinaryTree();
tree.setRoot(root8);
root8.setLeftNode(data2);
root8.setRightNode(data6