线索二叉树
线索二叉树的概念
一棵二叉树,最下面一层全是叶子节点,这些叶子节点的左右孩子指针全为NULL,其实是浪费了这些内存。详细计算一下,节点二数为n的二叉树有n+1个空指针。这是怎么算来的呢?其实有个非常简单的算法:有n个节点的二叉树很明显有2n个指针,而这n个节点除了主根节点,其他节点都有一条连线指向这个节点的父节点,反过来来看,这个连线就是父节点指向这个节点的指针,因而这种连线有n-1条,也就是说二叉树中的非空指针有n-1个,那么空指针就有n+1个了。
这n+1个空指针,占了总指针的一半,其实是比较浪费内存的,所以最好拿这些指针来存点有意义的东西,比如说可以用来存某种遍历方式的结果,如果一个节点的左子树指针为空,就用这个指针来指向在这种遍历方式下这个节点的前一个节点,如果这个节点的右子树指针为空,就用这个指针来指向在这种遍历方式下这个节点的下一个节点。这样,就充分利用起了这些空指针。这样形成的二叉树又叫线索二叉树,这些空指针被利用起来指向前个节点或后一个节点,叫作线索。由于二叉树常见的遍历方式有先序遍历、中序遍历和后序遍历,因此,线索二叉树也有先序二叉树、中序二叉树以及后序二叉树。
构造线索二叉树的算法
既然线索二叉树储存的是一种遍历的结果,那么构造线索二叉树的过程也就是遍历了,这个过程又叫线索化。
比如说中序遍历,首先访问左子树,如果左子树为空