今天我们来聊聊线索二叉树
线索二叉树的诞生背景
对于n个结点的二叉树,则在二叉链存储结构中就会有n+1个空链域
当我在查找某个结点的时候,想要知道这个节点的前驱结点或者后继结点,我该怎么做?
1.我是不是可以先序遍历或者后序遍历得到他们的前驱或者后继
2.我是不是可以开辟内存空间,对于每个结点增加一个指向它的前驱,增加一个指向它的后继
利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。
关于线索二叉树你所需要知道的
重要
如果一个结点的左孩子为空,则指向它的前驱结点。
如果一个结点右孩子为空,则指向它的后继。
怎么理解这句话,我们来看一个例子
还是这张图
它的后序遍历为:
DBEFCA
那么它的后序线索二叉树是怎么画的呢?
我们根据它的后序遍历的结果来画后序线索二叉树
先来看D:D的左孩子为空,则指向它的前驱,它没有前驱。
D的右孩子为空,则指向它的后继,也就是B。
再来看B:B的左孩子为空,则指向它的前驱,它的前驱根据后序遍历的结果是D,所以B的左孩子指向D
B的右孩子不为空
再来看E,E的左孩子为空,则指向它的前驱结点B,E的右孩子为空,则指向它的后继结点F
再来看F,它的左孩子为空,则指向它的前驱结点E。它的右孩子为空,则指向它的后继节点C