二叉树线索化理论笔记
二叉树的每个节点只记录指向其左、右子节点的指针,不能直接得到节点在任一遍历序列中的前驱、后继。为保存此信息,用节点的空指针域(n节点的二叉树共有n+1个)记录节点的前驱、后继。对于每个节点,利用(若有)左侧的空指针域记录指向其前驱的指针,利用(若有)右侧的空指针域记录指向其后继的指针。这种指针即为线索,加上线索的二叉树称为线索二叉树。在(前序、中序或后序)遍历过程中为二叉树加上线索的过程称为线索化二叉树。另外还要对每个节点增加2个标致域,分别表示该节点是否存在左、右子数,同时也说明是否存在空指针域,是否需要线索化。
语文不好,理论描述不多讲,还是看图最清晰。
1.前序线索化
以下图为例,在前序遍历的过程中,值为2的节点不存在空指针,因此不做任何变化。到底值为2的节点,该节点不存在左子树,因此可利用空指针域记录该节点的前驱,即值为2的节点。之后到值为1的节点,该节点为叶子节点,因此令左指针指向前序,即值为0的节点,令右指针指向后继,即值为4的节点。后面的节点以此类推,到达最后一个节点时,该节点不存在后继,因此令其右指针指向NULL。
2.中序线索化
在中序遍历的过程中对二叉树进行线索化,示例如下:
3.后序线索化
在后序遍历的过程中对二叉树进行线索化,示例如下:
尾声:写完后看了几个别人写的博客,逻辑之清晰,内容之丰富,都让人啧啧称赞,瞬间感觉自己笔记做得很烂。但这笔记也是花时间记了,还画图了,不想浪费,因此也厚着脸皮发出来。希望请多包涵,今后努力提高记笔记的能力。