Java数据结构与算法8——二叉树

1.树的基本知识

树是什么树是由边和节点构成的数据结构。节点通常就是存储数据的实体。

树的常见术语
1)根:树的顶端节点。一棵树只有一个根。
2)边:节点到节点的连接
3)路径:沿着边,从一个节点走到另一个节点,所经过的节点顺序称为路径
4)父节点、子节点
5)节点、叶节点
6)度:一个节点包含的子节点数
7)子树
8)层:就是从根开始到这个节点的“代”,层数也称为高度或深度
9)遍历:按照某个特定的顺序访问节点
10)关键字:节点对象域中的某个属性,用来识别节点对象

2.二叉树的概念和理解

二叉树是什么如果树中的每个节点,最多只能有两个子节点,这样的树称为二叉树。

二叉树理解

  • 1、二叉树不是树的特殊情形,其区别为:
    1)树中节点的字节点树没有限制,而二叉树中限制节点数为不超过2个
    2)树的节点没有左右之分,二叉树节点是分左右的

  • 2、二叉树有五种基本形态
    1)空二叉树,连根节点都没有
    2)只有一个根节点的二叉树
    3)只有左树
    4)只有右树
    5)完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。

  • 3、满二叉树:除叶节点外,每一个节点都有左右子节点,且叶子结点都处在最底层的二叉树

  • 4、满二叉树肯定是完全二叉树,完全二叉树不一定是满二叉树。

  • 5、二叉树常被用作二叉查找树、二叉排序树、二叉堆。

3.二叉树的性质

  • 性质1:在二叉树的第 i 层上至多有2^(i-1)个结点
  • 性质2:深度为k的二叉树至多有 2^k -1个结点
  • 性质3:对任何一颗二叉树T,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1
  • 性质4:具有N个结点的完全二叉树的深度为[log2为底N]+1
  • 性质5:如果对一棵有N个结点的完全二叉树的结点按层序编号,即从第 1层到第[log2为底N]+1层,每层从左到右,对任一结点i(1<=i<=n)有:
    (1)如果i=1,则结点i是二叉树的根;如果i>1,则其父结点是[i/2]
    (2)如果2i>n,则结点i无左子节点;否则其左子节点是2i。也就是该节点是叶子节点。
    (3)如果2i+1>n,则结点i无右子节点;否则其右子节点是2i+1
    (4)若i为奇数且不为1,则Ki的左兄弟的编号是i-1;否则,Ki无左兄弟
    (5)若i为偶数且小于n,则Ki的右兄弟的编号是i+1;否则,Ki无右兄弟

4.二叉搜索树的查找、插入、遍历、查找最大最小值和删除操作的实现

二叉搜索树是什么如果一棵二叉树,满足:左子节点的值小于节点的值,而右子节点的值大于节点的值,就被称为二叉搜索树。

提示:删除节点有两个子节点的时候,要用它的中序后继来代替该节点,算法是:找到被删除节点的右子节点,然后查找这个右子节点下的最后一个左子节点,也就是这颗子树的最小值节点,这就是被删除节点的中序后继节点。

二叉搜索树操作的效率常见的操作效率是:O(logN),是以 2为底的

用数组来表示树把树的节点遍上序号,按序存放到数组中。这样一来,查找节点就变成了查找相应的索引了。这种方法不常用,了解即可。这种方式效率不高,因为不满的节点,还有删除的节点,在数组中留下了洞,更糟糕的是删除节点时,如果需要移动子树的话,就更浪费时间了。

5.哈夫曼编码和哈夫曼树的基本知识

5.1 哈夫曼(Huffman)编码

霍夫曼编码是一种统计编码,属于无损压缩编码。
其基本思路是:对每个字符编码的码长是变化的,对于出现频率高的,编码的长度较短;而对于出现频率低的,编码长度较长。编码规则还要求:每个编码都不能是其它字符编码的前缀。

5.2 哈夫曼树

哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL= (W1L1+W2L2+W3L3+...+WnLn),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)要使其WPL值最小,必须使权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。

6.哈夫曼算法

哈夫曼树的构造方法——Huffman算法

  • step1.对给定的n个权值{W1,W2,W3,...,Wi,...,Wn},构成n棵只有根节点的二叉树,令起始权值为Wj,为方便处理,可以按照权值进行升序排列
  • step2.在这些二叉树中,选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。
  • step3.从森林中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到森林中。
  • step4.重复2和3两步,直到森林中只有一棵二叉树为止

7.使用哈夫曼算法来实现压缩和解压的功能

哈夫曼压缩的编码部分的实现步骤:

  • step1.统计:读入要压缩的源文件,统计字符出现的次数
  • step2.建树:构建哈夫曼树
  • step3.编码:对哈夫曼树的左边记0,右边记1,就可以得到字符的哈夫曼编码。
  • step4.输出:把编码序列输出,这就是压缩后的数据

哈夫曼压缩的解码部分的实现步骤 :

  • step1.读取码表的信息,构建出码表来
  • step2.读回具体的数据内容
  • step3.把读回的字节还原成对应的整型数据
  • step4.根据码表,把内容组成的哈夫曼编码,依次转换回原始的字符,从而得到原始的

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容