目录
随着刷题的进展,在重重困难之下终于刷完了基础算法的链表部分,下面就是树了,于是开始补树。。。。。
❤ 2021.10.4 ❤
查找
静态查找
这里介绍了一种很有意思的查找方法,首先数组下标中不存储值,而是作为“哨兵”,然后在查找时先将被查找值存入下标0中,然后从后向前遍历,知道找到等于被查找值为止,这是有两种情况,一种是在非0下标元素中找到被查找值,返回该下标,另一种在0中找到,返回0(也就是没找到)。
这种方法判断条件少,代码简单,如下所示。
二分查找
※使用二分查找的条件:数据必须放在数组里面,数组元素有序排列。
举例:略
树
树的定义
树的一些基本术语
树的表示
把“儿子-兄弟”表示法转一下就变成了二叉树(妙啊!)
二叉树的定义
完全二叉树相比于满二叉树缺少后面连续序号的数个叶节点。
二叉树的性质
二叉树的实现
二叉树的存储
数组
以数组形式存储二叉树,父节点序号乘2和乘2加1就是子节点序号,子节点序号除2取整就是父节点序号,妙啊!
链表
二叉树的遍历
先序遍历
用递归的方法实现二叉树遍历,妙啊!
中序遍历
调整打印语句的位置就能实现中序遍历。
后序遍历
把打印语句放在后面就实现了后序遍历。
第一次碰到某个节点就打印出来是先序,第二次碰到就打印出来是中序,第三次碰到才打印是后续。
嗯。。。本来明白了看了这个图又晕了。。。。
二叉树的非递归遍历
二叉树的遍历就是一个将二维数据展开成一维(线性)的过程(降维打击?),需要解决的关键问题是在访问父节点的其中一个子节点时将另一个子节点的地址保存下来。
层序遍历
用队列的方式实现
然后举了几个例子,比较有用的是这个
正好今天的leetcode做到了这道题。。。
至于后面讲的如何判别两二叉树同构。。。没看懂。。。
❤ 2021.10.8 ❤
二叉搜索树
二叉搜索树的操作
二叉搜索树的查找操作
二叉搜索树的递归查找法
递归法的递归都为尾递归,而尾递归都可以用循环来实现。
查找最大和最小元素
把数值大小的比较转换为在二叉树的位置的搜索
二叉搜索树的插入
插入函数的重点是要返回一个所插入节点的地址。
二叉搜索树的删除
这就比较麻烦了
将这种情况转化成只有一个子节点或者没有子节点的情况,左子树的最大值或者右子树的最小值其下面一定不会有两个节点,于是用其值代替被删除节点,然后删除那个用来替代的节点。
平衡二叉树
居然能和斐波那契数列有关系!
平衡二叉树的调整
就挺复杂的。。。
好像看懂了又好像没看懂。。。
等需要用到的时候再说吧。。。
判断是否同一棵二叉树
举了一个例子,还挺麻烦的
习题讲解
都是比较基础的习题,不过她讲了测试数据的一些原则