别再翻了,面试二叉树看这 11 个就够了~_校招面试二叉树算法 hard

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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 四次分手过程
福利:可以在我的公众号『小鹿动画学编程』,后台回复『资源』即可获取。

在这里插入图片描述
在这里插入图片描述

❤️ 不要忘记留下你学习的脚印 [点赞 + 收藏 + 评论]

文章都看完了,为何不妨点个赞呢?嘻嘻,那就说明你很自私,你怕那么好的文章让别人也看到。开个小小玩笑。

其实我也很自私,我把我的一直以来坚持原创的公众号:**「小鹿动画学编程」**偷偷给你,里边汇聚了小鹿以动画形式讲解的数据结构与算法、网络原理、Web 等技术文章。
在这里插入图片描述

动一动你的小手,点赞就完事了,每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=

作者Info:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

img-ScWoHJBh-1715799558494)]
[外链图片转存中…(img-9rR2Oi89-1715799558494)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值