剑指Offer
文章平均质量分 57
油炸丸子George
使有洛阳二顷良田,安能配六国相印
展开
-
【Java实现】剑指Offer10.2——青蛙跳台阶:思路分享
传送门:斐波那契数列相关问题思路详解:【Java实现】剑指Offer10.1/10.2——斐波那契数列/青蛙跳台阶:三种思路分享这道题可以变成斐波那契一样的题,只不过条件(F(0)不同)有一丢丢变化,剩下的完全一样这篇主要讲如何转化成斐波那契数列问题。思路跳到第n级台阶,上一步可能跳了1级,或者跳了2级,所以分成两种情况:如果上一步是1,那么之前的n-1步,有多少种方法?如果上一步是2,那么之前的n-2步,有多少种方法?因此:f(n)=f(n-1)+f(n-2)这里理解了的话, .原创 2021-03-06 17:45:57 · 133 阅读 · 0 评论 -
【Java实现】剑指Offer10.1/10.2——斐波那契数列/青蛙跳台阶:三种思路分享
同学们,下方传送门:青蛙跳台阶的问题首先看到这道题后,我们能够自己继续递推:0,1,1,2,3,5,8...同时,能够得到n,n-1,n-2之间的关系:F(n)=F(n-1)+F(n-2)再配合上面给到的初始条件,第一种思路也就产生了——递归。思路1:递归想到递归,先找到构建递归的条件:终止条件本问题和子问题解的关系以上问题,我们都有答案,直接上代码:class Solution { public int fib(int n) { if(n==0).原创 2021-03-06 17:37:48 · 126 阅读 · 0 评论 -
【Java实现】剑指Offer32.3——从上到下打印二叉树(三):之字形打印二叉树
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:建议参考以下两道题,循序渐进:剑指Offer32.1——从上到下打印二叉树剑指Offer32.2——从上到下打印二叉树(二)这道题我自己写了好久,每次都是卡在某个测试用例,非常崩溃,最后看了大神的解法,觉得豁然开朗,自己的问题在于:没有控制好奇偶层和出队列顺序的关系,导致十分混乱这么说大家可能难以理解,回到这道题,我们先想一下逆序打印,共有几种方法?前提:返回值要求是List<List<Int.原创 2021-02-07 17:23:08 · 231 阅读 · 2 评论 -
【Java实现超级高频面试题,字节半年16次】剑指Offer32.2——从上到下打印二叉树(二)(LeetCode102:二叉树的层序遍历)思路分享
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:层序遍历、广度优先(BFS)一般都是借助队列的!!!这道题建议参考二叉树的深度,其中的第二种解法——层序遍历,用队列的思想巧妙地实现。不同于上一道题从上到下打印二叉树,这道题要求每一行输出一个数组,而不是一个一维数组,需要变成二维数组所以问题的难点就来了:怎么确定哪些元素是来自同一行呢??接下来介绍两种方法,能够很巧妙地确定元素的行所属:方法一:两个辅助队列这个方法就是二叉树的深度中使用.原创 2021-02-04 16:01:09 · 142 阅读 · 0 评论 -
【Java实现高频面试题】剑指Offer32.1——从上到下打印二叉树:思路分享
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:层序遍历、广度优先(BFS)一般都是借助队列的!!!这道题建议参考二叉树的深度,其中的第二种解法——层序遍历,用队列的思想巧妙地实现。算法步骤:借助队列FIFO的思想,首先创建队列,将根节点加入创建收集结果的list集合,由于不知道节点的个数,所以先用集合进入循环,循环的目的是将队列清空,因此终止条件是队列为空第一次循环时,先从队列中poll()出来一个,把其val加入集合然后判断这个点是.原创 2021-02-04 14:43:39 · 135 阅读 · 0 评论 -
【Java实现】剑指Offer26——树的子结构:思路分享(类比树的对称)
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:递归!递归!递归!遇到树的问题首先想到递归!判断是不是子结构——就是要判断一棵树能否包含另一棵树——遍历两个树看是否一致举个栗子:如图所示,给定两棵树:首先判断根节点,也就是3和4,如果根节点相等,就继续同时遍历两棵树,看其他部分是否相同,我们把上述遍历来看是否完全相同的方法定义为recur如果根节点不同,则递归到主树的左右子节点,也就是4和5,分别判断这两个值和目标根节点是否相等,如果.原创 2021-02-04 13:33:19 · 102 阅读 · 0 评论 -
【Java实现】剑指Offer28——对称的二叉树(LeetCode101:对称二叉树)思路分享
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:解题思路:递归!递归!递归!还是那句话,看到树首先就要想到递归!为什么看到树就要想到递归呢?因为从根节点出发,每棵树都可以看做是由左右子树加根节点构成,只不过左右子树是树还是叶子节点的问题。这道题而言,由于前面刚做过二叉树的镜像,因此就有了第一种思路:思路一:先镜像再判断,只需判断是否完全一样如果一棵树在镜像前后完全一样,那么这棵树一定是对称的注意:不能改变树的原始结构,需要先复制,再镜像才行.原创 2021-02-04 11:45:47 · 97 阅读 · 0 评论 -
【Java实现面试高频】剑指Offer07——重建二叉树(LeetCode105:从前序与中序遍历序列构造二叉树)最详细思路分享
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:递归!递归!递归!遇到树的问题首先想到递归!要明白重建二叉树如何重建,需要哪些关键因素?就在找根节点,然后去他的左右子树继续寻找根节点,直到左右子树为空的叶子节点原理:当我们知道一颗二叉树的中序排列,再任意知道前序和后序的一种,便可以还原整棵二叉树这个原理大家试一下就明白了,简单来说因为中序遍历的结果能够帮我们将树分成左右两部分,算出左右子树的节点个数,去前序分别取出各自的前序,这样就可.原创 2021-02-04 10:38:06 · 159 阅读 · 0 评论 -
【Java实现】剑指Offer27——二叉树的镜像(LeetCode226:反转二叉树)思路分享
同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:解题思路:递归!递归!递归!看到树首先就要想到递归!镜像,用在二叉树上,无非就是左右颠倒,也就是左子树变成右子树,右子树变成左子树。这个想法天然适合使用递归。算法步骤:设定一个递归的终止条件:也就是root==null实现左右子节点的位置互换递归左右子树全部完成后返回root注意理解!递归过程的代码从上至下依次执行!也就是说,左右子树的两句递归代码全部执行完后,才会返回root代码如下.原创 2021-02-03 17:26:54 · 156 阅读 · 0 评论 -
【Java实现】剑指Offer54——二叉搜索树的第K大节点(利用BST的性质遍历)思路分享
【Java实现】剑指Offer54——二叉搜索时的第K大节点(利用BST的性质遍历):思路分享关于二叉搜索树的一些学习笔记在这里哦:接下来几期内容会更新《剑指Offer》中所有“树”标签的习题及思路,传送门在此:解题思路:从题目看到二叉搜索树,就要联想到BST的性质:中序遍历是递增的我们都知道二叉树的中序遍历:先遍历左子树,然后根节点,最后右子树既然BST这样遍历能得到递增序列,那如何得到递减序列呢?先遍历右子树、然后根节点、最后左子树,即可得到递减序列到这里,大体的思路已经原创 2021-02-03 17:09:36 · 134 阅读 · 0 评论 -
【Java实现】剑指Offer55.1——二叉树的深度解题分享(LeetCode104:二叉树的最大深度)思路分析
【Java实现】剑指Offer55.1——二叉树的深度(LeetCode104:二叉树的最大深度):思路分享接下来几期内容会更新《剑指Offer》中所有树标签的习题及思路,传送门在此:题意解析:给定一棵二叉树,想要求出这棵树的最大深度,通俗来讲:就是求这棵树的最大层数或者:求出左右子树哪一个往下走的比较深因此,这道题就存在两种解法,深度遍历(DFS)和层序遍历(BFS)解法一:深度遍历当我们深度遍历一棵树时,以后序遍历为例:首先遍历根节点的左子树然后遍历根节点的右子树最后遍历原创 2021-02-03 15:54:58 · 126 阅读 · 0 评论