哈夫曼树和线索二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jAVA_JLSONG/article/details/76541249

线索二叉树的思想来源于二叉树的存储结构中,存在一些空的指针域,因此是否能够将这些空间利用起来,存储一些关于节点间先后顺序的信息,由此产生了线索二叉树。线索二叉树中,线索反映前驱、后继的关系,而指针则体现左右子树。
  以二叉链表为例,线索二叉树存储结构上的特点是添加标识符,表明左右指针域究竟存的是指向前驱和后继的线索,还是指向左右子树的指针;
  线索二叉树的优势是一旦对一棵二叉树建立了相应的线索结构,当以后使用特定的方式遍历这课树时,可以避免递归方式和非递归方式(利用栈)带来的空间开销。
  构建和遍历线索二叉树的思路如下:
首先构造一棵二叉树(构造二叉树可以使用任意顺序:先序、中序、后续均可);
按照一定的顺序线索化这棵二叉树
然后按照相同的顺序遍历该二叉树,就可以利用上一步构建的线索信息。

这里写图片描述
①当ltag为0时,指向该结点的左孩子,为1时指向该结点的前驱
②rlag为0时,指向该结点的右孩子,为1时指向该结点的后驱

**哈夫曼树:
在有n个节点的哈夫曼树中,其节点总数为2n-1**
构造哈夫曼树:
①根据给定的n 个权值,w1,w2.。。。构成n棵二叉树的森林F={T1,T2,….},其中每颗二叉树Ti中都只有一个权值为Wi 的根节点,其左右子树均空;
②在森林F中选出两棵根节点权值最小的树作为一棵新树的左右子树,且置新的根节点的权值为其左右子树上根节点的权值之和
③从F 中删除构成新树的两棵树,同时把新树加入到F 中
④重复第②③步,直到F中只含有一棵树为止,此树便是哈夫曼树

猜你喜欢

转载自blog.csdn.net/jAVA_JLSONG/article/details/76541249
今日推荐