数据结构day8

一、有序二叉树

    又称二叉排序树、二叉搜索树、二叉查找树

    左子树的数据小于根的数据,右子树的数据大于等于根的数据,这种树称为有序二叉树

    有序二叉树中的中序遍历的结果是从小到大排序,因此有序二叉树也可以是一种排序算法

    并且对有序二叉树的查找天然是二分查找,所以有序二叉树经常考

    注意:需要会根据插入的数据,还原一棵有序二叉树

二、线索二叉树

    规律:在有n个节点的链式二叉树中,必定存在n+1个空指针域

    在链式二叉树中有很多没被使用的空指针,会造成一定的浪费

    在有序二叉树中,可以让这些空指针指向下一个\前一个节点,这种树称为线索二叉树

    在线索二叉树中,以中序遍历树时,可以不用递归而是通过循环即可,从而提高遍历树的效率、节约内存

    中序线索二叉树节点数据项:

        数据

        左子树指针

        右子树指针

        右子树是否是线索标志(为真:右子树线索 为假:右子树不是线索)

    实现线索二叉树的过程:

        1、生成得到一颗普通的有序二叉树

        2、按照中序遍历整棵树进行创建线索

        3、按照线索循环遍历线索二叉树

三、选择树(胜者树、败者树)

    是一种完全二叉树,把待比较的数据存储在最后一层,根节点是左右子树中的其中一个,是他们的最大或最小值,不停地比较形成一棵选择树

    作用:能快速地找出最大值或最小值,如果带比较数据有部分更新,重新选择的速度也很快

四、堆 heap

    是一种完全二叉树,不适合使用链式存储,适合用顺序存储

    大顶堆(大根堆):

        根节点比左右子树大

    小顶堆(小根堆):

        根节点比左右子树小

    数据项:

        存储数据的内存首地址

        容量

        数量

    操作:

        创建、添加、删除、空堆、满堆、堆顶

五、哈夫曼树\霍夫曼树

    基本概念:

    路径长度:从一个节点开始到另一个节点之间的路径条目数

            根节点到第L层上的任意节点的路径长度L-1

    树的路径长度:从根节点出发到每个节点的路径长度之和

    节点的权:将树中的节点额外赋予某种含义的数值,该数值就称为节点的权

    节点的带权路径长度:从根节点出发到该节点之间的路径长度与该节点权的乘积

    树的带权路径长度:所有叶子节点的带权路径长度之和,简称WPL

        WPL是衡量一棵带权二叉树优劣的关键

    示例:

    成绩 <60    60~69   70~79   80~89   90~100

    评级 E       D       C       B       A

    比例 5%      15%     40%     30%    10%

    普通的带权二叉树的

        WPL=10+30*2+40*3+15*4+5*4 = 270

    经过优化后的带权二叉树的

        WPL=40+30*2+15*3+10*4+5*4 = 205

   

    哈夫曼树是一棵带权二叉树且它的WPL最小

    构建一棵哈夫曼树:

    1、把n个带权节点存入集合F中,每个节点左右子树置空

    2、从F中选取根节点的权值最小的两个节点,作为左右子树构建成一棵新的二叉树,把左右子树的权值之和作为该树的根节点的权值

    3、从F中删除刚刚选择的两个节点,把新得到的二叉树放入F中

    4、重复第2、3步骤,直到F中只剩下一棵树,便是哈夫曼树

        WPL=40+30*2+15*3+10*4+5*4 = 205

六、哈夫曼编码

    目的:当年是为了解决远距离通信时传输数据的最优解问题

    待发送文字:ABCAA EEDFB

    方法1:转成二进制发送

        A 000 B 001 C010 D011 E100 F101

        总共要发送30个0\1

    方法2:

        1、根据待发送文字的频率,构建一棵哈夫曼树

        假设频率:A27 B8 C15 D15 E30 F5

        2、设置哈夫曼树的左分支为0、右分支为1,从根节点出发到每个叶子节点经过的路径分支组成的0\1的编码就是所谓的哈夫曼编码

        A 01  B 1001 C 101 D 00 E 11 F 1000

            011001101010111110010001001

    作用:数据、文件压缩的一种方式

关于二叉树的常考笔试、面试题:  

    1、把一棵二叉树转换成它的镜像树

    2、输入两颗二叉树A、B,判断B是否是A的子结构(NULL不是任何树的子结构)

    3、把一棵有序二叉树转换成一个有序的双向链表

    4、找出有序二叉树中的第k大的数据是多少

    5、判断一棵二叉树是否对称(镜像)

    6、实现之字形遍历一棵树,第一层按照从左往右顺序遍历,第二层从右往左遍历,第三层又从左往右遍历,依次变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值