二叉树
二叉树中最重要的就是遍历,常见的遍历方式:
- 前序遍历:先访问根节点,在访问左节点,最后访问右节点。如图的顺序是:10,6,4,8,14,12,16
- 中序遍历:先访问左节点,在访问根节点,最后访问右节点。如图的顺序是:4,6,8,10,12,14,16
- 后序遍历:先访问左节点,在访问右节点,最后访问根节点。如图的顺序是:4,8,6,12,16,14,10
推导
已知前序、中序,可以唯一确定一个二叉树;
已知后序、中序,可以唯一确定一个二叉树;
但是已知前序、后序却不能确定一棵二叉树;
二叉树分为斜树,满二叉树,完全二叉树;
1. 斜树:所有节点只在左边或者右边;
满二叉树:所有的分支度都是二,并且所有的叶子节点在最下面;
完全二叉树:所有的叶子节点在最下面,若分支的度为二,则只有左节点;
规则:
1:每层结点数:二叉树的第i层上最多有 (n=2^(i-1))个结点,(i>=1);
2:所有结点数:深度为K的二叉树最多有(n=2^K-1)个结点,(K>=1) ;
3:对于任意一棵二叉树,n0 =叶子结点总数、n1=度为1的结点总数、n2=度为2的结点总数、n=总结 点数:n0=n2+1
分支线总数=n-1=n1+2n2;
n=n0+n1+n2;
n0+n1+n2-1 = n1+2n2 => n0=n2+1;
4:满二叉树的深度:log2(n+1);
5:完全二叉树的深度:向下取整数(log2n)+1;
存储方式
- 顺序存储:方便查询
- 链式存储:方便增加和删除,二叉链表结构:左节点指针+数据域+右节点指针
赫夫曼树
路径:结点之间的分支构成两个结点之间的路径;
路径长度:两个结点之间的分支数量;
树的路径长度:从树根到每一结点的路径长度之和;
叶子结点带权路径长度:叶子结点到根结点的路径长度*叶子结点权值;
树的带权路径长度 WPL: 所有叶子结点带权路径长度之和;
赫夫曼树 : WPL 最小的二叉树。也称最优二叉树;
赫夫曼树编码
赫夫曼树左分支代表0,右分支代表1
从根结点到叶子结点经过的分支组成0和1的序列称为叶子结点对应的字符编码,即赫夫曼编码。
A:10001
B:1001
C:101
D:11
E:0
ABCDE的编码是100011001101110
作者:liangxifeng833
链接:http://www.jianshu.com/p/43b6b90555ca
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。