1、线索二叉树
1.1线索二叉树的定义
(1)线索二叉树有啥用?
普通二叉树的节点包含左孩子和右孩子的信息,但并没有直接存储关于"直接前驱"和"直接后继"的信息,结点的前驱和后继只能在遍历过程中获得。
因此这里引入线索二叉树,线索二叉树会额外存储前驱和后继的信息,从而能够在常规操作之外快速找到节点的前驱或后继。
(2)定义
空指针域的利用:
利用二叉链表中的空指针域保存信息
1)若结点有左子树,则lchild指向其左孩子;否则,lchild指向其直接前驱
2)若结点有右子树,则lchild指向其右孩子;否则,lchild指向其直接后继
标志位的引入:
为了区分 lchild
和 rchild
域中的指针究竟是指向孩子节点还是指向前驱/后继节点,在线索二叉树中为每个节点增加了两个标志位 LTag
和 RTag。
LTag=0, lchild 域指向左孩子
LTag=1, lchild 域指向其前驱
RTag=0, rchild 域指向右孩子
RTag=1, rchild 域指向其后继
例如我们有这样一棵二叉树
那么它的先序遍历就是ABCDE
它的线索二叉树如下图:
它的中序遍历是:BCAED
线索二叉树如下图:
它的后续遍历是:CBEDA
线索二叉树如下图: