本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

不知不觉二叉树已经和我们度过了三十三天,微信公众号:「代码随想录」里已经发了三十三篇二叉树的文章,详细讲解了30+二叉树经典题目,一直坚持下来的录友们一定会二叉树有深刻理解了。

在每一道二叉树的题目中,我都使用了递归三部曲来分析题目,相信大家以后看到二叉树,看到递归,都会想:返回值、参数是什么?终止条件是什么?单层逻辑是什么?

而且几乎每一道题目我都给出对应的迭代法,可以用来进一步提高自己。

下面Carl把分析过的题目分门别类,可以帮助新录友循序渐进学习二叉树,也方便老录友面试前快速复习,看到一个标题,就回想一下对应的解题思路,这样很快就可以系统性的复习一遍二叉树了。

公众号的发文顺序,就是循序渐进的,所以如下分类基本就是按照文章发文顺序来的,我再做一个系统性的分类。

二叉树的理论基础

  • 关于二叉树,你该了解这些!:二叉树的种类、存储方式、遍历方式、定义方式

二叉树的遍历方式

  • 深度优先遍历

    • 二叉树:前中后序递归法:递归三部曲初次亮相
    • 二叉树:前中后序迭代法(一):通过栈模拟递归
    • 二叉树:前中后序迭代法(二)统一风格
  • 广度优先遍历
    • 二叉树的层序遍历:通过队列模拟

求二叉树的属性

  • 二叉树:是否对称

    • 递归:后序,比较的是根节点的左子树与右子树是不是相互翻转
    • 迭代:使用队列/栈将两个节点顺序放入容器中进行比较
  • 二叉树:求最大深度
    • 递归:后序,求根节点最大高度就是最大深度,通过递归函数的返回值做计算树的高度
    • 迭代:层序遍历
  • 二叉树:求最小深度
    • 递归:后序,求根节点最小高度就是最小深度,注意最小深度的定义
    • 迭代:层序遍历
  • 二叉树:求有多少个节点
    • 递归:后序,通过递归函数的返回值计算节点数量
    • 迭代:层序遍历
  • 二叉树:是否平衡
    • 递归:后序,注意后序求高度和前序求深度,递归过程判断高度差
    • 迭代:效率很低,不推荐
  • 二叉树:找所有路径
    • 递归:前序,方便让父节点指向子节点,涉及回溯处理根节点到叶子的所有路径
    • 迭代:一个栈模拟递归,一个栈来存放对应的遍历路径
  • 二叉树:递归中如何隐藏着回溯
    • 详解二叉树:找所有路径中递归如何隐藏着回溯
  • 二叉树:求左叶子之和
    • 递归:后序,必须三层约束条件,才能判断是否是左叶子。
    • 迭代:直接模拟后序遍历
  • 二叉树:求左下角的值
    • 递归:顺序无所谓,优先左孩子搜索,同时找深度最大的叶子节点。
    • 迭代:层序遍历找最后一行最左边
  • 二叉树:求路径总和
    • 递归:顺序无所谓,递归函数返回值为bool类型是为了搜索一条边,没有返回值是搜索整棵树。
    • 迭代:栈里元素不仅要记录节点指针,还要记录从头结点到该节点的路径数值总和

二叉树的修改与构造

  • 翻转二叉树

    • 递归:前序,交换左右孩子
    • 迭代:直接模拟前序遍历
  • 构造二叉树
    • 递归:前序,重点在于找分割点,分左右区间构造
    • 迭代:比较复杂,意义不大
  • 构造最大的二叉树
    • 递归:前序,分割点为数组最大值,分左右区间构造
    • 迭代:比较复杂,意义不大
  • 合并两个二叉树
    • 递归:前序,同时操作两个树的节点,注意合并的规则
    • 迭代:使用队列,类似层序遍历

求二叉搜索树的属性

  • 二叉搜索树中的搜索

    • 递归:二叉搜索树的递归是有方向的
    • 迭代:因为有方向,所以迭代法很简单
  • 是不是二叉搜索树
    • 递归:中序,相当于变成了判断一个序列是不是递增的
    • 迭代:模拟中序,逻辑相同
  • 求二叉搜索树的最小绝对差
    • 递归:中序,双指针操作
    • 迭代:模拟中序,逻辑相同
  • 求二叉搜索树的众数
    • 递归:中序,清空结果集的技巧,遍历一遍便可求众数集合
    • 迭代:模拟中序,逻辑相同
  • 二叉搜索树转成累加树
    • 递归:中序,双指针操作累加
    • 迭代:模拟中序,逻辑相同

二叉树公共祖先问题

  • 二叉树的公共祖先问题

    • 递归:后序,回溯,找到左子树出现目标值,右子树节点目标值的节点。
    • 迭代:不适合模拟回溯
  • 二叉搜索树的公共祖先问题
    • 递归:顺序无所谓,如果节点的数值在目标区间就是最近公共祖先
    • 迭代:按序遍历

二叉搜索树的修改与构造

  • 二叉搜索树中的插入操作

    • 递归:顺序无所谓,通过递归函数返回值添加节点
    • 迭代:按序遍历,需要记录插入父节点,这样才能做插入操作
  • 二叉搜索树中的删除操作
    • 递归:前序,想清楚删除非叶子节点的情况
    • 迭代:有序遍历,较复杂
  • 修剪二叉搜索树
    • 递归:前序,通过递归函数返回值删除节点
    • 迭代:有序遍历,较复杂
  • 构造二叉搜索树
    • 递归:前序,数组中间节点分割
    • 迭代:较复杂,通过三个队列来模拟

阶段总结

大家以上题目都做过了,也一定要看如下阶段小结。

每周小结都会对大家的疑问做统一解答,并且对每周的内容进行拓展和补充,所以一定要看,将细碎知识点一网打尽!

  • 本周小结!(二叉树系列一)
  • 本周小结!(二叉树系列二)
  • 本周小结!(二叉树系列三)
  • 本周小结!(二叉树系列四)

最后总结

在二叉树题目选择什么遍历顺序是不少同学头疼的事情,我们做了这么多二叉树的题目了,Carl给大家大体分分类

  • 涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。

  • 求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。

  • 求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。

注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序, 二叉树:找所有路径也用了前序,这是为了方便让父节点指向子节点。

所以求普通二叉树的属性还是要具体问题具体分析。

最后,二叉树系列就这么完美结束了,估计这应该是最长的系列了,感谢大家33天的坚持与陪伴,接下来我们又要开始新的系列了「回溯算法」!

我是程序员Carl,组队刷题可以找我,本文leetcode刷题攻略已收录,更多精彩算法文章尽在:代码随想录,关注后就会发现和「代码随想录」相见恨晚!

如果感觉题解对你有帮助,不要吝啬给一个

精讲了33道二叉树经典题目之后,我总结了这些,帮你一举搞定二叉树相关推荐

  1. 汇道科技传授5个排版技巧,帮你轻松搞定UI设计

    文字排版不只是从下拉选单选择字型和点数而已,文字排版是一项流传数世纪的技艺,自木制和金属的活版印刷便开始,而且它不只历史悠久,还很实用,大部分的人只要掌握一些实用的诀窍,就可以将之活用在诸如履历表.电 ...

  2. 百看不如一练 100道python经典题目,拿去参考学习练手(附答案)可复制

    近年来,Python在编程语言界里赚足了风头,无论是受欢迎程度,还是薪资待遇,都非常可观,相应的,Python岗位要求也越来越高,无论你是零基础还是老前辈,在Python面试中都不能轻视. 不打无准备 ...

  3. 一文彻底搞定二叉树的前序、中序、后序遍历(图解递归非递归)

    前言 大家好,我是bigsai,在数据结构与算法中,二叉树无论是考研.笔试都是非常高频的考点内容,在二叉树中,二叉树的遍历又是非常重要的知识点,今天给大家讲讲二叉树的层序遍历. 这部分很多人可能会但是 ...

  4. jq 读取office插件_800+页麦肯锡经典图示发送!让你不用插件,轻松搞定逻辑图...

    职场PPT的制作中,经常会遇见需要处理逻辑图的时候,比如公司的人员架构,公司的产品线,公司的发展战略图等等. 相信很多人在遇到逻辑架构图PPT页时,通常而言,我们一般会有两个选择,要么用 PowerP ...

  5. 三个不等_2道真题,讲透「基本不等式」的使用原则 | 真题精讲-11

    「不等式」和「最值」之间有着非常天然的强联系:基本不等式有3个非常明显的形式特征:知识点的用法比知识点本身更重要. 先发福利:这里有6场「高考数学」系列Live的讲义,全拿去,送给你--<高考数 ...

  6. 高薪程序员Java面试题精讲系列汇总

    因CSDN没有分类归纳博客的功能,所以特写本帖汇总<高薪程序员面试题精讲系列>教程,方便大家查阅!希望各位小伙伴可以从我的拙作中掌握Java的高频面试题,也希望各位可以多给予指教!目前本系 ...

  7. 通用技术和信息技术合格考知识点_【精品课】高中信息技术学考+高中通用技术学考-总复习(2019-2020-全考点60小时精讲)...

    [精品课]高中信息技术学考+高中通用技术学考-冲A总复习(2019-2020-全考点60小时精讲) 1. 课程内容介绍: 1)高中通用技术学考: 技术与设计1.技术与设计2(苏教版)(必修) 授课老师 ...

  8. 视频教程-PR教程-Premiere 2020影视剪辑实战精讲-其他

    PR教程-Premiere 2020影视剪辑实战精讲 Adobe平面设计与影视剪辑专家讲师.微软Office办公软件专家讲师.资深IT图书作者/策划人/出版人.深度/终身学习研究与实践者.Python ...

  9. 「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  10. l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...

    本期例题: LeetCode 98. Validate Binary Search Tree 验证二叉搜索树(Medium) LeetCode 426. Convert Binary Tree to ...

最新文章

  1. Python未来的发展趋势怎么样
  2. 链表问题15——将搜索二叉树转换成双向链表(方法二)
  3. Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离
  4. mysql5.7.16安装版_mysql数据库5.7.16安装版怎么安装图解
  5. python实时数据流_python – 使用烧瓶web-app监控实时数据流
  6. 计算机网络学习笔记(七)——传输层、TCP三次握手、四次挥手、TCP流量控制、大总结
  7. MySQL 视图的基础操作(五)
  8. be my friend
  9. MySQL INSERT的4种形态
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线作业管理系统
  11. tcp报文 如何判断是否为握手_“三次握手,四次挥手”你真的懂吗?
  12. Windows XP英文版安装中文语言包来解决无法显示中文的方法(转载)
  13. 好用的数据建模工具,探索中完善
  14. window多台服务器文件同步,SyncToy 两台Windows电脑文件同步
  15. jersey文件服务器,通过jersey实现客户端图片上传
  16. 关于OPC的一些组件、没有注册类
  17. vc 鲜为人知的 __if_exists
  18. python写一个表白程序带时间_python如何写出表白程序
  19. 淘宝商品详情,1688商品详情滑块的解决方法和接口
  20. 蓝桥杯嵌入式解决LCD与LED冲突的方法

热门文章

  1. 【转】项目代码风格要求
  2. Ext.js入门:TabPanel组件(八)
  3. 三级联动第二种方法 三级联动.html
  4. 九度OnlineJudge之1001:A+B for Matrices
  5. MC新手入门(四十二)------ 愤怒小狗制作三
  6. VC++2012编程演练数据结构《14》链式堆栈
  7. Python基础学习Day3 数据类型的转换、int、str、bool、字符串的常用方法、for循环...
  8. 20161212xlVBA文本文件多列合并
  9. Firefox 的about:config
  10. Safari/Chrome浏览器打不开淘宝/天猫网页怎么办?