文章内容来源于c语言数据结构(严蔚敏版本),可以简单的说是读书心得
书里面是以中序遍历为例子的,所谓中序遍历就是先遍历左子树,再遍历根节点,再遍历右子树。
所谓二叉树的线索化的目的就是知道节点的前边是哪一个节点以及节点的后边又应该是哪一个节点。前序以及后记都是逻辑上的,不是物理上的。
代码省略了,有兴趣的可以翻看书本。
在递归里面先处理左子树,直到最后一个节点,判断节点的左子树是否为空?如果为空就指向前驱节点。
如果节点的右子树为空,则指向后继节点。
当判断当前节点的过程中,判断前一个节点的右孩子指针是否为空,为空,则令前一个节点的右孩子指向当前节点。
赫夫曼树:
带权节点到根节点的路径长度极为赫夫曼树。 如果所有节点的路径长度最短即为最小赫夫曼树。
赫夫曼树的一般构造方法:
1、在带权节点中选择最小的两个带权节点,作为左右子树,其权值相加,构成左右子树的根节点。
2、从带权节点的集合中删除已选过的节点
3、在1的基础上,才剩下的带权节点的集合里再选择一个最小的带权节点,作为1构造的树的根节点的兄弟左子树,两个值相加,构成新的根节点。
4、重复123步骤,直到带权节点集合里面没有节点了,到此一个赫夫曼树就构造完成了。
其应用领域有电报。