数据结构学习笔记(二)——树


随着刷题的进展,在重重困难之下终于刷完了基础算法的链表部分,下面就是树了,于是开始补树。。。。。

❤ 2021.10.4 ❤

查找

在这里插入图片描述

静态查找

这里介绍了一种很有意思的查找方法,首先数组下标中不存储值,而是作为“哨兵”,然后在查找时先将被查找值存入下标0中,然后从后向前遍历,知道找到等于被查找值为止,这是有两种情况,一种是在非0下标元素中找到被查找值,返回该下标,另一种在0中找到,返回0(也就是没找到)。
这种方法判断条件少,代码简单,如下所示。
在这里插入图片描述

二分查找

在这里插入图片描述
※使用二分查找的条件:数据必须放在数组里面,数组元素有序排列。
举例:略
在这里插入图片描述

树的定义

在这里插入图片描述
在这里插入图片描述
树的一些基本术语
在这里插入图片描述
在这里插入图片描述

树的表示

在这里插入图片描述
把“儿子-兄弟”表示法转一下就变成了二叉树(妙啊!)
在这里插入图片描述

二叉树的定义

在这里插入图片描述
在这里插入图片描述
完全二叉树相比于满二叉树缺少后面连续序号的数个叶节点。

二叉树的性质

在这里插入图片描述

二叉树的实现

在这里插入图片描述

二叉树的存储

数组

在这里插入图片描述
以数组形式存储二叉树,父节点序号乘2和乘2加1就是子节点序号,子节点序号除2取整就是父节点序号,妙啊!
在这里插入图片描述

链表

在这里插入图片描述

二叉树的遍历

先序遍历

在这里插入图片描述
用递归的方法实现二叉树遍历,妙啊!

中序遍历

在这里插入图片描述
调整打印语句的位置就能实现中序遍历。

后序遍历

在这里插入图片描述
把打印语句放在后面就实现了后序遍历。
在这里插入图片描述
第一次碰到某个节点就打印出来是先序,第二次碰到就打印出来是中序,第三次碰到才打印是后续。
嗯。。。本来明白了看了这个图又晕了。。。。

二叉树的非递归遍历

二叉树的遍历就是一个将二维数据展开成一维(线性)的过程(降维打击?),需要解决的关键问题是在访问父节点的其中一个子节点时将另一个子节点的地址保存下来。
在这里插入图片描述
在这里插入图片描述

层序遍历

用队列的方式实现
在这里插入图片描述
在这里插入图片描述
然后举了几个例子,比较有用的是这个
在这里插入图片描述
正好今天的leetcode做到了这道题。。。

至于后面讲的如何判别两二叉树同构。。。没看懂。。。

❤ 2021.10.8 ❤

二叉搜索树

在这里插入图片描述
二叉搜索树的操作
在这里插入图片描述

二叉搜索树的查找操作

在这里插入图片描述
二叉搜索树的递归查找法
在这里插入图片描述
递归法的递归都为尾递归,而尾递归都可以用循环来实现。
在这里插入图片描述
在这里插入图片描述

查找最大和最小元素

在这里插入图片描述
把数值大小的比较转换为在二叉树的位置的搜索
在这里插入图片描述

二叉搜索树的插入

在这里插入图片描述
插入函数的重点是要返回一个所插入节点的地址。
在这里插入图片描述

二叉搜索树的删除

这就比较麻烦了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将这种情况转化成只有一个子节点或者没有子节点的情况,左子树的最大值或者右子树的最小值其下面一定不会有两个节点,于是用其值代替被删除节点,然后删除那个用来替代的节点。
在这里插入图片描述

平衡二叉树

在这里插入图片描述
在这里插入图片描述
居然能和斐波那契数列有关系!

平衡二叉树的调整

就挺复杂的。。。
好像看懂了又好像没看懂。。。
等需要用到的时候再说吧。。。

判断是否同一棵二叉树

举了一个例子,还挺麻烦的

习题讲解

都是比较基础的习题,不过她讲了测试数据的一些原则
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值