补充:二叉排序树 BST
特性
1、对于 BST 的每一个节点 node,左子树节点的值都比 node 的值要小,右子树节点的值都比 node 的值大。
2、对于 BST 的每一个节点 node,它的左侧子树和右侧子树都是 BST。
还有一个重要的性质:BST 的中序遍历结果是有序的(升序)。
补充:哈夫曼树
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
![](https://i-blog.csdnimg.cn/blog_migrate/ea6af623cba71aeaa8e7a7e484e8011e.png)
结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积。例如,图 1 中结点 b 的带权路径长度为 2 * 5 = 10 。
树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL” 。例如图 1 中所示的这颗树的带权路径长度为:
WPL = 7 * 1 + 5 * 2 + 2 * 3 + 4 * 3
构建哈夫曼树
(1)在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和;
(2)在原有的 n 个权值中删除那两个最小的权值,同时将新的权值加入到 n–2 个权值的行列中,以此类推;
(3)重复 1 和 2 ,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树。
![](https://i-blog.csdnimg.cn/blog_migrate/5d64cef7e3830d559cb7aaef7bb24b69.png)
哈夫曼编码
![](https://i-blog.csdnimg.cn/blog_migrate/9b40fe3af2ae6d915fb4209cfe12d8f6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/498d97b9be2df7bd3c9d5d33738266ff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eff81535319d7887c0bb3d114ba6a9eb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/551430d8920a1ec872ac5f6e79661666.png)
![](https://i-blog.csdnimg.cn/blog_migrate/05132ef7c161c80f9b5219fc0cea4ea7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7b7878c635f3c3aba67d005bc9b66f0a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/db8b3d200c99644d256770266394300a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/55a7f75871fc7ca88063dc9a00ce277c.png)
编码结果
A B C D
11 100 0 101