数据结构与算法之二叉树

来源:互联网 发布:法瑞尔威廉姆斯 知乎 编辑:程序博客网 时间:2024/05/23 21:56

二叉树


二叉树中最重要的就是遍历,常见的遍历方式:
  1. 前序遍历:先访问根节点,在访问左节点,最后访问右节点。如图的顺序是:10,6,4,8,14,12,16
  2. 中序遍历:先访问左节点,在访问根节点,最后访问右节点。如图的顺序是:4,6,8,10,12,14,16
  3. 后序遍历:先访问左节点,在访问右节点,最后访问根节点。如图的顺序是:4,8,6,12,16,14,10
    二叉树
    遍历过程

推导

已知前序、中序,可以唯一确定一个二叉树;
已知后序、中序,可以唯一确定一个二叉树;
但是已知前序、后序却不能确定一棵二叉树;

二叉树分为斜树,满二叉树,完全二叉树;
1. 斜树:所有节点只在左边或者右边;

这里写图片描述

  1. 满二叉树:所有的分支度都是二,并且所有的叶子节点在最下面;

    这里写图片描述

  2. 完全二叉树:所有的叶子节点在最下面,若分支的度为二,则只有左节点;
    这里写图片描述


规则:

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;


存储方式

  1. 顺序存储:方便查询
  2. 链式存储:方便增加和删除,二叉链表结构:左节点指针+数据域+右节点指针

赫夫曼树

路径:结点之间的分支构成两个结点之间的路径;
路径长度:两个结点之间的分支数量;
树的路径长度:从树根到每一结点的路径长度之和;
叶子结点带权路径长度:叶子结点到根结点的路径长度*叶子结点权值;
树的带权路径长度 WPL: 所有叶子结点带权路径长度之和;
赫夫曼树 : WPL 最小的二叉树。也称最优二叉树;

hefuman


赫夫曼树编码

赫夫曼树左分支代表0,右分支代表1
从根结点到叶子结点经过的分支组成0和1的序列称为叶子结点对应的字符编码,即赫夫曼编码。
赫夫曼树编码
A:10001
B:1001
C:101
D:11
E:0

ABCDE的编码是100011001101110



作者:liangxifeng833
链接:http://www.jianshu.com/p/43b6b90555ca
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原创粉丝点击