【前言】:

后续会将纸质笔记的过程图更新上来。

【1】:二叉树遗留

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4boF5Zj-1663994025825)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220821200515149.png)]

【搜索二叉树】:

对于每一颗子树来说,它的左树的节点都比它小,它的右树的节点都比它大;

//一颗经典的搜索二叉树,你可以认为其中是没有重复值的。

//此即——经典的搜索二叉树~ ~。~

【如何判断一颗搜索二叉树呢?】:

我用中序遍历的话 , 如果是搜索二叉树是一定不会降序的;——【而且】:一定会升序!!!

反之:

​ 如果某一个位置有降序的话,那它一定不是搜索二叉树;

  • Code05_TestBST

public class Code05_TestBST {public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value = data;}}public static int preValue = Integer.MIN_VALUE;public static boolean checkBST(Node headd) {if (headd == null) {return true;}boolean isLeftBst = checkBST(headd.left);  //左树上是不是《搜索二叉树》???if (!isLeftBst) {return false;}if (headd.value <= preValue){return  false;}else {preValue = headd.value;}boolean isRightBst = checkBST(headd.right);return isRightBst;}
}

【完全二叉树】:

【如何判断一颗树是完全二叉树?】:

即使是最后一层不满,最后一层也是从左到右依次变满的样子。 //从左往右依次变满;

【具体的判断方法】:

【1】:

​ 如果有右孩子,但是没有左孩子,——则直接返回false.

【2】:

​ 在第一个条件不违规的情况下: 如果遇到了第一个左右两个孩子不双全的情况,那么后续所有的节点都应当是叶子节点;

  • 《@@73_1》

【满二叉树】:

【最大深度】 :  L
【节点个数】 :  N
【满足关系】 :  N = 2^L - 1

//如果满足上述的关系(N等于2的L次方),那么这棵树必定是满二叉树;

//如果不满足的话 , 这棵树肯定不是。

【平衡二叉树】:

对于任何一个子树来说,它左树的高度和它右树的高度差都不会超过1. //对于每一个子树 ~

【二叉树的递归套路】:

当我在求解一个二叉树问题的时候 , 我去列可能性的时候 , 怎么去列可能性. . . . . .

【可能性的组织】:

基于我可以向我的左树要某些信息,右树要某些信息的情况下,我怎么罗列可能性?

  • 如果我当前的这棵树是平衡二叉树的话:

【1】:

左树得是平衡二叉树;

【2】:

右树也得是平衡二叉树;

【3】:

对于当前节点来说,我左树的高度和我右树的高度差不能超过1。 | 左高 - 右高 | <= 1

【#】:

只有上面的三个条件都成立 , 我整个的这个二叉树才是平衡二叉树 ~

【左树需要的信息】:

​ 是否是平的(平衡二叉树) ? 高度是多少 ?

【右树需要的信息】:

​ 是否是平的(平衡二叉树) ? 高度是多少 ?

【#】:

​ 左树和右树要求是一样的。

【角度】:(搜索二叉树)

我 X 为头的二叉树 , 是否是搜索二叉树 ?

「1」左树得是搜索二叉树

「2」右树得是搜索二叉树

「3」左树的Max < 根节点

「4」右树的Min > 根节点

​ //基于我可以向我的左树要某些信息 , 右树要某些信息的情况下, 我怎么罗列可能性:

【1】:

​ 左树是否是搜索二叉树。(该树上的最大值)——Max

【2】:

​ 右树是否是搜索二叉树。(该树上的最小值)——Min

[ # ] :

​ 左右树的要求是不一样的 , 但我们又是递归套路 , 递归套路要求对每一个节点的要求都是一样的才叫递归。所以我不管你是左树/右树,一律给我返回三个信息。

  • 三个信息:

(1)整棵树是否是搜索二叉树;

(2)整棵树Min。 //最小值是多少;

(3)整棵树Max。 //最大值是多少;

【树型DP问题】:

//在树上做动态规划。

  • 二叉树题目中最难的,没有更难的了~ ~ ~

//树的递归套路非常好用 , 能解决面试中的一切树型DP问题!!!

【树型DP】:

解一个题的时候可以通过向左树要信息,向右树要信息;

【不适用二叉树套路的题目】:

【整棵树所有值的中位数】:

//排完序之后的中位数。——这种类型的题目就无法通过《二叉树套路》来解;

中位数信息是要结合所有情况来看的;

  • 《@@73_2》

//中位数这种固定套路的可能不会在面试过程中出现~~~

【无法用套路解的】:

这个套路不能解的题目,往往非常的麻烦 ~

  • 不适用这个套路的题目,一般也不会考,因为它区分度很低~

【 最低公共祖先 】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xccnACQn-1663994025826)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220822152830950.png)]

    //——————下面是:比较难理解的代码~~~public static Node lowestAncestor(Node head, Node o1, Node o2) {if (head == null || head == o1 || head == o2) {  //base casereturn head;}Node left = lowestAncestor(head.left, o1, o2);    //左树的返回值;Node right = lowestAncestor(head.right, o1, o2);  //右树的返回值;if (left != null && right != null) {return head;}return left != null ? left : right;}

【 lowestAncestor中o1、o2 的所有可能 】:

  • 《@@74_4》

[一定返回null]:

如果一个树上既没有O1,又没有O2 , 那么它是一定会返回null的~

【后继节点】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZG7FHeT-1663994025826)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220823202441290.png)]

【概念】:

中序遍历中一个节点的下一个节点。

【经典后继节点例子】:

  • 《@@76_5》

中序遍历结果:DBEAFCG

//所以我们说B的后继节点是E;

//E的后继节点是A。

//A的后继节点是F。

//G的后继节点是空。

【前驱节点】:

中序遍历中一个节点的前一个节点。

【父指针】:

经典二叉树中只有指左孩、右孩的指针,该题是有parent( 指向父节点 )指针的;

//每个parent指针都是好的,确实能正确地指向自己的父亲。

【快一些找到后继节点】:

经典二叉树需要先中序遍历来得到一个list集合。

  • 代价很高:

要遍历所有的节点来得到一个List ~。//这种方式的复杂度是 O(N)

【优化后的复杂度】:

X -----( 有K步 )-----> Y //前提是得有parent指针;

  • O(K)

X节点到其后继节点Y之间有K步 , 则找到X节点的时间复杂度就是O( K );

//一个节点找后继,理论上是可以只走有限距离的。

【如何在结构上来寻找后继节点】:

原来可以偷懒(先中序遍历得到一个List集合。)

【 后继节点规律 】:

  • 《@@76_6》

【 特殊节点 】:

二叉树中最后一个节点是没有后继节点的,因为它所有的父亲都发现自己不是左分支( 一直到根节点 )。

//最后一个节点的后继节点是——Null .

【 只有最后的节点才会发现 】:

我父亲的节点都走到空了 , 也没发现自己是父亲的左孩子。

【二叉树的序列化/反序列化】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvZxk8tx-1663994025826)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220823224419183.png)]

  • 树—>字符串

【反序列化】:

字符串要能够对应出唯一的结构来~

//一颗树的结构和值都能对应成一个唯一的字符串;

结构和字符串是一一对应的关系,不是多对多的关系。

【两棵树序列化的结果】:

//加下划线是表示一个值的结束;

//用#来表示空;

  • 《@@77_7》

【先序方式反序列化】:

//先建立头节点,然后建立头节点的左子树,左子树建完了———再建右子树~~~!!!

【微软原题(折纸)】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2Bu19Vc-1663994025826)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220823232612033.png)]

【折纸记录】:

【一次】:
O1【二次】:
O2,O1,T2【三次】:
O3,O2,T3,O1,O3,T2,T3
  • 给你对折的次数,让你从上到下,打印折痕的凹凸方向。

【折痕规律】:

每一条折痕的上下都会出现一个新折痕,上凹下凸;

【二叉树中序遍历】:

你想打印折痕的方向,就是对下图这棵二叉树作中序遍历:

  • 《@@78_9》(折痕树)

//总树的头节点为凹折痕;

//每一颗左子树的头节点都是凹折痕;

//每一颗右子树的头节点都是凸折痕;

数据结构与算法——左程云06相关推荐

  1. 数据结构与算法——左程云09

    [前言]: 后续有时间会将纸质笔记中的过程图更新上来. [1]: [Dijkstra使用堆加速]: <@@119_1> [这个方式还可以加速]: //可以通过小根堆的方式来拿值. //系统 ...

  2. 数据结构与算法——左程云03

    [前言]: 看了左神的很多视频,感觉一些算法最好的复现方式应该是用一张张的图来细节刻画,个人感觉这种效果会比动态图要好. 故在此先将全部的笔记附到这里,后续在一点一点把过程图复原完整(暂时没研究手绘软 ...

  3. 数据结构与算法——左程云05

    [前言]: 后续有时间会把文中的图片整理好,将纸质笔记中的图做成JPG. [1]:链表遗留 [单链表相交]: 单链表算法层次上最难 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...

  4. 数据结构与算法——左程云08

    [前言]: 后续有时间会更新上纸质笔记中的过程图. [1]:前缀树 [解释前缀树]: <@@93_1> [TrieNode]: <@@95_2> [代价极低]: 一个前缀树一旦 ...

  5. 数据结构与算法——左程云04

    [前言]: 后续有时间会将文中的图片部分,以及手写笔记中的过程图制作成JPG图片上传. [1]:排序算法的稳定性 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39Zp ...

  6. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  7. 一看“左程云:200道算法与数据结构”,二刷“阿里云:70+算法题、30种大厂笔试高频知识点”,3月过去终于挺进我梦中的字节!

    不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2020年还有个三十来天就要完美收尾了,那么如何才能在未来三个月弯道超车赶上"金三银四的春招",进入梦寐以求 ...

  8. 数据结构与算法XS班-左程云第八节课笔记(归并排序和快速排序)

    第8节 归并排序和快速排序 ##这是数据结构与算法新手班-左程云第八节课的笔记## 归并排序 归并排序实际上是一个很经典的排序方法,时间复杂度o(N*logN). 递归版本(图解排序算法(四)之归并排 ...

  9. 数据结构与算法XS班-左程云第一节课笔记(位运算、算法是什么、简单排序)

    第1节 位运算.算法是什么.简单排序 ##这是数据结构与算法新手班-左程云第一节课的笔记## 1. 位运算 // 你们会不会表示一个数字的32位啊? // Java中int类型默认以32位二进制数在计 ...

最新文章

  1. Flyweight 享元模式
  2. socket通过多网卡收发数据
  3. spring教程--AOP详解
  4. 3.非关系型数据库(Nosql)之mongodb:升降序排序,排序分页,$all,$in,$nin,$or,$nor, $exists,游标,更新(update,$set,$unset,$inc)
  5. 考研英语二大纲22年考研
  6. [css] 你用过css的tab-size属性吗?浏览器默认显示tab为几个空格?
  7. 【CF - 699C】 Vacations (日程安排 dp)
  8. phpstorm,webstorm取消自动保存并标识修改的文件为星星标记
  9. 字符串用法大全(源码解析,建议收藏!)
  10. 传输表空间--使用Rman方式
  11. 计算机刷bios版本,详细教你电脑刷bios
  12. linux添加软件源命令,Linux 添加源
  13. 程序员写个爬虫程序,整个公司被端了?
  14. SpringCloud Gateway gatewayRequestUrl is missing
  15. obs推流视频比特率_我如何使用OBS和WebSockets流视频
  16. 大学计算机文件管理实验步骤,大学计算机实验报告
  17. Cisco 2900xl/3500xl/2950/3550密码恢复流程
  18. 欢迎访问4W家庭理财主页!
  19. 使用adb连接夜神模拟器,查看多开模拟器端口号
  20. java init方法

热门文章

  1. WINRAR -- CRC校验失败,文件被破坏
  2. 电话号码对应英文单词
  3. HTML元素居中定位与尺寸拉伸
  4. 老式计算机组装教程,旧机械硬盘可以装新电脑上吗?台式电脑加新/旧机械硬盘+分区教程...
  5. 网络分析流量FIN_WAIT_2状态解释
  6. 图片上传 axios
  7. 【转载】JVM能够开启多少线程
  8. 如何对一年级小学生进行养成教育
  9. python 爬取 世界空气污染:空气质量指数历史数据
  10. 将数组矩阵进行转置,水平镜像,垂直镜像,翻转90°,180°