1.30总结

心得体会

每次自习的时候摸鱼都有种带薪拉屎的快感(这鱼你就摸吧,测试的时候一测一个不吱声)

学习内容

二叉树的遍历

什么先序遍历 中序遍历 后序遍历 直接秒杀

对于遍历过程中树的某一个结点,重要的部分就是“当前”和“下一步”,也就是“根结点”,左孩子和右孩子(根结点打引号的原因:对于一个结点,它可以是某颗子树的“根结点”,也可以是某个节点的孩子,这样就很好理解遍历了)

先序遍历:先访问根结点,再依次访问左孩子和右孩子

中序遍历:先访问根结点的左孩子,再访问根结点,再访问右孩子

后序遍历:先访问根结点的左孩子,再访问右孩子(它的兄弟),再访问根结点

所以这三种遍历方法的区别就是“访问根结点”这一步在第几步

至于怎么控制,最通俗的方法就是给出结构体,对于某个节点,不只记录节点数据,还包含指针(根据遍历方法匹配指针指向的对象),之后使用栈还是队列就看个人了

值得一提的是,先序遍历的起点是二叉树的根结点,中序遍历和后序遍历的起点是二叉树根结点的左孩子

而后序遍历的时候还要对右孩子进行标记和判断标记的处理,具体可以看一下原贴,我自己推导了一下是会出现重复访问的情况的

(递归和非递归的代码实操都在原贴写的很详尽了,我就不丢人现眼了)

树和森林

树转二叉树

其实在这里可以看到链式存储的优点,这里改路径只需要改对应结点的结构体的指针域就好了,如果是顺序存储的话操作起来会麻烦许多

森林转二叉树  原理相同

特殊的二叉树

(你们理工科搞理论的是不是都擅长在一个大的基本理论里面找特殊情况,然后再在特殊情况里面找更特殊的情况来衍生概念啊。对其实下面的东西别看它复杂,只是二叉树的特殊情况)

线索二叉树

如果我们用一个结构体类型的变量来储存二叉树一个结点的数据,且这个结构体包含:指向该节点左右孩子的两个指针和结点本身的内容,那么对于没有左右孩子的结点,或者只有左孩子的结点,就会产生空指针域

为了利用这些空指针域,我们可以让这些指针指向该结点的前驱和后续

那么上行下效嘛,其他结点的指针也要指向它们的前驱和后续

那么我们可以给出一个标志域

(但是加了这一步 就要在访问结点的时候相应的修改指针状态(线索化),对于懒狗来说又麻烦了一点)

二叉排序树

(咱们就是说这个树这个结点我们是非排不可吗)

二叉排序树(也称二叉查找树)或者是一棵空树,或者是具有下列特性的二叉树:

  1. 若左子树非空,则左子树上所有结点的值均小于根结点的值。
  2. 若右子树非空,则右子树上所有结点的值均大于根结点的值。
  3. 左、右子树也分别是一棵二叉排序树

这个排序树,主要是插入删除的时间性能比较好;针对一个乱序集合的归置,然后这个排序树相对普通二叉树在查找上面更有时间优势,但是对于有序集合它反而不占优势

平衡二叉树

平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1。


它是一种高度平衡的二叉排序树。它要么是一棵空树, 要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF , 那么平衡二叉树上所有结点的平衡因子只可能是-1、0和1。只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。

个人理解:基于这个定义,可以看到主要是相对普通的二叉树有深度的区别,这在一些遍历过程中更加有时间和空间优势(但是它的调整和转换流程也比较复杂)

因为平衡二叉树的深度小,所以时间优势就很好理解啦,同时递归处理的话,对内存的占用和递归深度有关,如果深度小的话也可以避免一些无效的内存占用

哈夫曼树

在许多应用中,树中结点常常被赋予一个表示某种意义的数值,称为该结点的。从树的根到任意结点的路径长度(经过的边数)与该结点上权值的乘积,称为该结点的带权路径长度。树中所有叶结点的带权路径长度之和称为该树的带权路径长度,记为

个人理解:大的数放高处(这个“大”的对比可以是数字也可以是字符,因为都要转成二进制肯定有大小之分的),对比结点权大小乱序的二叉树,它可以减少一些调用时的传输空间或者存储空间

(苯人对特殊二叉树的理解:如果不是 题目要求、特殊二叉树对题目有明显的优势、为了ac追求时间空间复杂度,就尽量不用,因为它们虽然特殊虽然在某方面具有优势,但是基本上 插入删除结点的处理就没有简单的,如果不熟练的话,可能改自己代码的逻辑错误的时候可能改到b溃)

  • 49
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值