满二叉树、完全二叉树、平衡二叉树、哈夫曼树

最近做各大公司的笔试题,发现二叉树这块考得还是比较多的。

在笔试中,我看到了一道选择题,问哈夫曼树是不是满二叉树、是不是完全二叉树?当时哪记得清,什么二叉树的概念全忘光了。。

下面特地做了总结。

满二叉树:除了叶节点外每一个结点都有左右子女且叶节点都处在最底层的二叉树。

这个满二叉树应该很好想象,就是一颗非常完美的树,除了叶节点其他节点都有两个孩子。

满二叉树、完全二叉树、平衡二叉树、哈夫曼树_第1张图片

完全二叉树:只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。

也就是说,在满叉树的基础上,我在最底层从右往左删去若干节点,得到的都是完全二叉树。

所以说,满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树

下面来看一个完全二叉树的例子:

满二叉树、完全二叉树、平衡二叉树、哈夫曼树_第2张图片

平衡二叉树:又称为AVL树,它是一颗空树或它的左右两个子树的高度差的绝对值不超过1

哈夫曼树:带权路径长度达到最小的二叉树,也叫做最优二叉树。

注意到这里,哈夫曼树只是一棵最优二叉树,不一定是完全二叉树,也不一定是平衡二叉树。完全是八竿子打不着的事情,人家哈夫曼树不关注树的结构,只关注带权路径长度好吗。。


下面再说几点关于二叉树性质,对于解答笔试题中的小题目很有用。

1.对于一棵有着k层的二叉树,最多有节点个数为 2^k-1,最少有k个节点

2.对于第k层,最多有节点个数为 2^(k-1)个

3.对于一棵非空的二叉树,叶子节点数目总比度为2的节点数要多1



你可能感兴趣的:(C++,二叉树)