二叉树

转载自 YSOcean

二叉树的基本理解:
树:一种抽象的数据类型,用来模拟具有书中结构性质的数据集合,通过节点连接边组成一个有层次关系的集合。 (1)圆,节点 (2)边,连接节点的线
在这里插入图片描述
树的常用语:
在这里插入图片描述
二叉树:树的每个节点最多只有两个子节点
二叉搜索树:左子树上的所有节点的值均小于它的根节点的值,若它的右子树不为空,则右子树上所有节点的值均大于它的根节点上的值。在这里插入图片描述
二叉树书的工作原理:
(1)查找节点
1.从根节点遍历,如果大于当前节点的值,搜索右子树
2.查找值等于当前的节点值,停止搜索
3.查找值小于当前值,搜索左子树

(2)插入节点
1.先查找插入位置,在进行插入

(3)遍历树(最常用中序遍历)
1.中序遍历:左子树 -> 根节点 -> 右子树
2.前序遍历:根节点 -> 左子树 -> 根节点
3.后序遍历:左子树 -> 右子树 -> 根节点
在这里插入图片描述

(4)最大值,最小值
node的左边为空的时间,node为最小值
node的右边为空的时间,node为最大值

(5)删除节点(三种情况,前两种比较简单,第三种比较复杂)
1.该节点是叶节点(没有子节点)
只需要将跟几点的左边或者右边设置为null
在这里插入图片描述

2.该节点有一个子节点
将该节点子节点的位置只想夫几点原本指向该节点的引用
在这里插入图片描述

3.该节点有两个子节点
查找比删除节点大(右侧的最左侧)的最小的节点,代替被删除节点的位置,将大的最小的节点设置为null
在这里插入图片描述
二叉树的效率

一颗满树每层的节点数为 2的n-1次方,因此最底层的节点个数比树的其他节点个数多1,因此,查找,插入,或者删除节点的一半都需要找到底层的节点,另外四分之一在倒数第二层,依次类推。
总共有N层,时间复杂度为logn底数为2
在10000个数据进行无序数组比较和链表比较时,平均比较5000次,但是在二叉树中只需要比较13次或者更少次数
所以说树的查询效率很高,单行数据库中经常使用

哈夫曼编码

计算机中每个字符在没有压缩的文本中有一个字节(ASCAll码)或者两个字节(Unicode)表示,在这些方案中每个字符需要相同的位数。
在编码序列中,全都是由0和1构成的序列

1.哈夫曼编码
二叉树中有一种特别的树——哈夫曼树(最优二叉树),其通过某种规则(权值)来构造出一哈夫曼二叉树,在这个二叉树中,只有叶子节点才是有效的数据节点(很重要),其他的非叶子节点是为了构造出哈夫曼而引入的!
哈夫曼编码是一个通过哈夫曼树进行的一种编码,一般情况下,以字符:‘0’与‘1’表示。编码的实现过程很简单,只要实现哈夫曼树,通过遍历哈夫曼树,规定向左子树遍历一个节点编码为“0”,向右遍历一个节点编码为“1”,结束条件就是遍历到叶子节点!因为上面说过:哈夫曼树叶子节点才是有效数据节点!
在这里插入图片描述
2.哈夫曼解码
果收到上面的一串哈夫曼编码,怎么解码呢?消息中出现的字符在哈夫曼树中是叶节点,也就是没有子节点,如下图:它们在消息中出现的频率越高,在树中的位置就越高,每个圆圈外面的数字就是频率,非叶节点外面的数字是它子节点数字的和。
  每个字符都从根开始,如果遇到0,就向左走到下一个节点,如果遇到1,就向右。比如字符A是010,那么先向左,再向右,再向左,就找到了A,其它的依次类推。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值