哈夫曼树的处理其实很简单,将所有的权值节点放入最小优先队列中,每次取队头的两个数出来,组成一棵树,这颗树就三个节点,头节点是两个子节点的权值和。然后将新形成的头节点放入原先的最小优先队列中,循环上述过程就成为了一颗哈夫曼树。

将这些节点放入最小优先队列中,选择最小的两个权值节点——2、3出队,同时算出这两个节点的和为5

将刚刚得到的5权值节点放入初始的最小优先队列中,并再次pop出两个最小的权值节点,这次选择5、6,计算出和为11

重复上述操作,我们发现现在的最小优先队列的值为[7 10 11 19 21 32],而我们这次出队的两个节点7、10都不是已经构造号的二叉树里面的节点,所以需要另外开一颗二叉树,这个树就是 17、7、10(头、左、右)

现在队列是[40 60],就只剩两个了,和为100,构建100、40、60

5、avl树,bst树(两者出现一个)

AVL 树是一种平衡二叉树。平衡二叉树递归定义如下:

基于这一句话,我们就可以进行判断其一棵树是否为平衡二叉了。

avl和bst树是动态查找,相比静态查找,有插入和删除功能。

avl的左旋右旋操作这里就得自己看了,我这边一时半会说不清。

选择排序最好的情况也需要O(n^2)

快速排序最坏情况就是倒序情况,退化成冒泡排序,时间复杂度为O(n^2)

性质1:二叉树第i层上的结点数目最多为 2(i≥1)。

性质2:深度为k的二叉树至多有(2)-1个结点(k≥1)。

性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。

性质4:在任意一棵二叉树中,若叶子结点的个数为n0,度为2的结点数为n2,则n0=n2+1