数据结构---树、森林、二叉树的应用

首先是关于树的存储结构

树的存储结构一般有三种:

1.双亲表示法(利用下标顺序存储)

2.孩子表示法(利用单链表形成的线性存储结构)

3.孩子兄弟表示法:这种表示方法相比与其他两个更重要,这种方法也叫二叉树表示法,利用二叉链表作为树的存储结构,这种方法让结点由三部分组成:结点值,结点指向第一个孩子的指针和指向下一个兄弟结点的指针(比较方便的实现从树到二叉树的转化)

然后思考我我们如何把树或者森林转化为二叉树呢??

记住一句话“左孩子,右兄弟”意思就是左边的都是孩子,右边的都是结点连成的兄弟

 类似的森林与二叉树也是这种规则,先把森林里的每棵树转化为二叉树,再把树根相连接,以第一棵树为轴心顺时针旋转45°即可

然后呢就是关于树、二叉树、森林的遍历的问题,这种好容易出选择题,问你这个森林的序列就是由二叉树的什么遍历出来的序列。他们的等价关系如下所示:

         之后就是关于二叉树的应用的问题了,我们涉及到了二叉排序树呀、二叉平衡树和哈夫曼树,重要是心里有幅图,就是关于他们每个树的特征特点。

1.BTS(二叉排序树)

        放一个根结点,然后再放入子树,左子树结点值会小于根结点,然后根结点会小于右子树,它的中序遍历是一个升序的序列。BTS的查找的话,就是比如有一棵树,先和根结点比,比他小往左比,比他大往右边继续比一次类推,题目的话可能会出比多少次啊这种题目。查找完肯定会有BTS的插入,它的插入是一个一个插入的,比他小往左插,比他大往右边插,然后关键字相同的话就会插入失败。最后就是BTS的删除,叶结点删掉的话不会破坏二叉树的性质,你在插回去也不会变(平衡二叉树就不一样了,可能会发生改变),如果删除的是结点的话,可以去看他们的后继或者前驱,可以直接替换。

        对于二叉树的查找效率的话,主要还是取决于树的高度吧,对于平衡二叉树而言,它的平均查找长度为O(log2n)

然后来到一个很重要的部分:平衡二叉树

平衡二叉树的定义就是任意节点左右子树的高度差不超过1

然后就是很重要的平衡二叉树的插入的环节了,首先我们要了解什么是平衡因子,什么是最小不平衡子树。

平衡因子的话很好理解,就是左子树减去右子树

最小不平衡子树的话就是离插入结点最近的高度差大于1 的子树

对于平衡二叉树的插入的话,有四种形态调整:

RR、LL、LR、RL      这几种选择的方式的话挺好理解的,就是往左往右拧半圈,可以去

https://www.cs.usfca.edu/~galles/visualization/AVLtree.html

自己试试,多练练就知道了,一般出题的话,会出一些比如给你一串数字,然后利用平衡二叉树排序,做题时一定要主要是平衡二叉树还是二叉排序树还是普通的二叉树,不然得搞死len

然后就是平衡二叉树的查找,这里我们要引入一个递推式,就是深度为h,怎么样让平衡二叉树的结点最少呢?其实可以自己试试,前三个分别是  0 2 4,就保证高度差为1就ok了,根据这几个数字,我们得到了一个递推式Nh = Nh-1 +   Nh-2 +1。含n个结点的平衡二叉树的最大深度为log2n。

最后就是哈夫曼编码这个知识点的话,知道一些结论就ok了,

1.对于哈夫曼树而言,构造的哈夫曼树并不唯一,但是其带权路径长度一定相等且都是最优的

2.哈夫曼树的结构比较特殊,它只有度为0和2的结点,可能题目会告诉 你结点求编码符多少个,非叶子结点的个数等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值