既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
面试题8:[题目解析]
1.3 树的子结构
输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。
面试题26:[题目解析]
1.4 二叉树的镜像
请完成一个函数,如果一个二叉树,该函数输出它的镜像。
面试题27:[题目解析]
1.5 对称二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
面试题28:[题目解析]
1.6 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。(按层遍历二叉树)
面试题32:[题目解析]
1.7 二叉树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历。如果是返回 true,如果不是返回 false。假设输入的任意两个数字互不相同。
面试题33:[题目解析]
1.8 二叉树和为某一值路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输出整数的所有路径。从树的根节点开始往下一直到叶子节点所经过的节点形成一条路径。
面试34:[题目解析]
1.9 序列化二叉树
请实现两个函数,分别用来序列化二叉树和反序列化二叉树。
面试题37:[题目解析]
1.10 二叉树的第 K 大节点
给定一棵二叉搜索树,请找出其中的第 K 大节点。
面试题54:[题目解析]
1.11 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶子节点依次经过的节点(包含根、叶子节点)形成树的一条路径,最长路径的长度树的深度。
面试题55:[题目解析]
总结归纳
通过《剑指 offer》以上十一个题,不是做过之后就记住了这么简单,而是通过以上二叉树题型的总结归纳,能不能举一反三,总结出二叉树面试题的解题思路,以后遇到二叉树相面试题能不能通过上边总结出来的步骤进行思考独立解决,这是这篇文章的重点。下面就分别通过解题思路、测试用例以及编写代码进行深入总结。
一、解题思路总结
1、根据树前(根左右)、中(左根右)、后(左右根)序遍历的规律来解决问题。
通过二叉树的遍历来找到规律,从而找到解题思路。
- 重建二叉树
根据前、中序遍历,找到二叉树的根节点和左右子树的规律,然后递归构建二叉树。
- 二叉树的下一节点
根据中序遍历,找出包含任何节点的一下节点的所有可能情况,然后根据情况分别进行判断。
- 二叉树的后续遍历序列
通过中序遍历找到打印二叉树结点的规律,可以判断此后续遍历是否为二叉树。
- 二叉树和为某一值的路径
选择二叉树的遍历,对每个节点进行存储判断,然后根据二叉树叶子节点的特点,进行对问题的解决。
- 二叉树的第 K 大结点
中序遍历的结果是从小到大,然后倒数找到第 K 大数据。
- 序列化二叉树
遍历二叉树,遇到 null 转化为特殊符号。
2、根据树的结构寻找规律来解决问题
通过二叉树的特点:左子节点小于父节点、右子节点大于父节点、树的节点可以进行递归等,以上特点又是更好的帮我们解决思路。
- 树的子结构
根据子结构和主体树的特点,对其树的结构进行分析,可以找到解题的思路。
- 镜像二叉树
观察镜像二叉树的左右子节点交换特点,可以找到解题思路。
- 对称二叉树
观察对称二叉树有什么特点,在结构上和遍历上寻找特点和规律,可以找到解题思路。
- 按层遍历二叉树
根据二叉树每层节点的结构关系(父子关系),可以进行每层遍历,通过上层找到下层的遍历结点。
- 反序列化二叉树
根据遍历的规律和二叉树的规律,将遍历结果生成一棵二叉树。
二、测试用例
通过以上题目中,我将测试用例分为三大种,测试代码的时候,在这三大种进行想就可以了。
- 普通测试
- 特殊测试
- 输入测试
1、普通测试
普通测试从两个方面去想,第一个方面就是问题的本身,比如对称二叉树的判断,普通测试就是分别输入一个对称二叉树和非对称二叉树进行测试。第二个方面就是问题本身没有什么可以找到的测试,比如按层遍历二叉树,它的普通测试就是分别输入完全二叉树(普通二叉树也可以),非完全二叉树进行测试。
2、特殊测试
特殊测试强调的是树的特殊性,特殊的二叉树就那么几个,比如:只有左子节点的二叉树、只有右子节点的二叉树、只有一个节点的二叉树、没有结点的二叉树。
3、输入测试
输入测试,顾名思义,要对用户输入的参数进行判断,比如,你输入一棵树,要判断是否为空。再比如,求最大 K 结点,对 K 的取值范围进行判断。
三、代码编写
将二叉树的解题思路转化为代码除了熟练最基本的二叉树的增、删、改、查之外,最重要的就是二叉树的递归,因为二叉树的结构决定了用递归解决二叉树问题更加简便。但是递归的书写并不仅简单,因为它有递和归的过程,大脑并不能更好的去处理这些,可以去看之前总结递归的文章《数据结构与算法之递归系列》。
书写二叉树递归问题有一点特别重要,不要尝试的去想那个递归的过程,而是先去寻找到递归的终止条件,然后对每次递归的结果进行判断,然后让他递归去吧,再次强调千万别去思考过程。
后记
刷了一遍剑指 offer 没有领略到这些题的精华所在,然后开始刷第二遍、第三遍、第四遍… 逐渐的对同一类型的题做出总结,第一周完成了所有二叉树面试题的总结,下一周会选择下一类型面试题进行攻克,打算用两个月的时间,将剑指 offer 所有的面试题型进行体系化的总结、归纳,边学习、边分享。「猛戳剑指 offer 仓库,和我一起打卡」
下一篇:动画:面试如何轻松手写链表?
推荐阅读:
1、动画:用动画给面试官解释 TCP 三次握手过程
2、动画:用动画给女朋友讲解 TCP 四次分手过程
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
mg-5OWsX4tt-1715799525281)]
[外链图片转存中…(img-YtbpeVIv-1715799525281)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!