递归
失业边缘,疯狂挣扎
这个作者很懒,什么都没留下…
展开
-
二叉树中俩节点的最短距离(pdd正式批2面)
1 题目如题2 Java2.1 方法一()public class PinDuoDuo_02 { public static void main(String[] args) { } // TODO 这方法不好啊老铁!别再用返回值了,用成员变量;本解法返回的是 a/b 到公共父节点的距离 static int d = 0; public static int helper(TreeNode root, TreeNode a, TreeNode b){原创 2020-09-04 17:59:14 · 222 阅读 · 0 评论 -
098. 验证二叉搜索树(中序递归)
1 题目链接:验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5...原创 2019-09-12 22:06:18 · 100 阅读 · 0 评论 -
437. 路径总和 III(Java)(树递归,回溯)
1 题目给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum-iii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2 Java2.1原创 2020-07-04 20:25:23 · 184 阅读 · 0 评论 -
543. 二叉树的直径(Java)(神坑!)(递归)
1 题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/diame原创 2020-05-19 12:23:09 · 202 阅读 · 0 评论 -
面试题55 - I. 二叉树的深度(104. 二叉树的最大深度)(Java)(递归)
1 题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2 Java2.1 方法一(递归)/原创 2020-05-13 15:54:28 · 119 阅读 · 0 评论 -
46. 全排列(Java)(回溯递归)
1 题目给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations著作权归领扣网络所有。商业转载请联系官方授权,非商业...原创 2020-03-11 17:53:26 · 378 阅读 · 0 评论 -
17. 电话号码的字母组合(Java)(回溯递归,非典型)
1 题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。来源:力扣(LeetCode)...原创 2020-02-17 14:19:20 · 248 阅读 · 0 评论 -
面试题38. 字符串的排列(Java)
1 题目输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]限制:1 <= s 的长度 <= 8来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zi-f...原创 2020-03-10 18:32:15 · 340 阅读 · 0 评论 -
面试题32 - III. 从上到下打印二叉树 III(Java)(层序队列迭代+Collections.reverse())(层序递归+递归参数level+Collections.reverse())
1 题目2 Java难点在于一层左到右,一层右到左,交替记录2.1 方法一(层序遍历,队列迭代)这样会导致无法使用DFS前序递归记录结果,因为前序递归必须是从左往右的,只能使用BFS队列迭代,且加入栈用于实现右到左/** * Definition for a binary tree node. * public class TreeNode { * int val; ...原创 2020-03-09 13:35:37 · 132 阅读 · 0 评论 -
面试题32 - II. 从上到下打印二叉树 II(Java)(层序迭代,队列)(前序递归+递归参数level)
1 题目2 Java2.1 方法一(层序迭代)在层序遍历的基础上,记录层的节点数/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { ...原创 2020-03-08 17:00:57 · 105 阅读 · 0 评论 -
面试题36. 二叉搜索树与双向链表(Java)(中序遍历 + 成员变量记录遍历的上一节点 + 头尾节点处理)
1 题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head...原创 2020-03-08 14:45:59 · 173 阅读 · 0 评论 -
面试题33. 二叉搜索树的后序遍历序列(Java)
1 题目2 Java2.1 方法一(递归)核心是,一段后序遍历数组,分左右根三部分,最后一个元素是根节点,前面分为两部分(左子树和右子树),前一部分都比根节点小,中间一部分都比根节点大递归思路:针对一段数组,从左开始遍历,先都比最后一个元素小,接着都比最后一个元素大,然后停止,若无法遍历到最后一个元素,说明该段数组不可能是任何二叉搜索树的后序遍历class Solution { ...原创 2020-03-07 18:34:05 · 115 阅读 · 0 评论 -
面试题54. 二叉搜索树的第k大节点(Java)(中序遍历变形)
1 题目2 Java中序遍历的延伸2.1 方法一(中序遍历,迭代)最傻的办法,没啥可说的/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int ...原创 2020-03-07 16:49:59 · 175 阅读 · 0 评论 -
面试题68 - II. 二叉树的最近公共祖先(Java)(前序递归)
1 题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,...原创 2020-03-07 14:37:19 · 140 阅读 · 0 评论 -
面试题68 - I. 二叉搜索树的最近公共祖先(Java)(前序递归)
1 题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root =...原创 2020-03-07 13:48:49 · 116 阅读 · 0 评论 -
心得:成员变量、方法外局域变量、方法内局域变量,三者各自与递归方法的关系
做二叉树的题,面试题34. 二叉树中和为某一值的路径,对各种变量在递归方法中起到的作用感到很乱,整理一下进一步思考成员变量、方法外局域变量、方法内局域变量,三者各自与递归方法的关系:方法内局域变量:只有作为返回值才能跨层记录结果,且仅能跨一层。记录or操作下层返回值,并在处理后作为返回值返回上层方法外局域变量:相当于全局变量,可跨多层记录结果,但必须作为递归方法的参数才能使用成员变量:完完...原创 2020-03-06 19:45:04 · 149 阅读 · 0 评论 -
面试题34. 二叉树中和为某一值的路径(113. 路径总和 II)(Java)(树递归)
1 题目输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 ...原创 2020-03-06 19:42:43 · 139 阅读 · 0 评论 -
面试题64. 求1+2+…+n(Java)
1 题目求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/qi...原创 2020-03-06 14:52:15 · 167 阅读 · 0 评论 -
面试题26. 树的子结构(Java)(遍历递归)
1 题目输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true限制:0 <= 节点个数 <= 10000来源:力扣(Leet...原创 2020-03-04 16:32:39 · 152 阅读 · 0 评论 -
面试题35. 复杂链表的复制(Java)(HashMap记录duplicate)
1 题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 ...原创 2020-03-03 17:37:52 · 150 阅读 · 0 评论 -
面试题24. 反转链表(206. 反转链表)(Java)(递归,原地反转)(迭代,原地反转)(迭代,反转至新链表,头插式)
1 题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl...原创 2020-03-02 14:27:06 · 143 阅读 · 0 评论 -
662. 二叉树最大宽度(Java)
1 题目给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximu...原创 2020-02-25 15:20:44 · 824 阅读 · 0 评论 -
99. 恢复二叉搜索树(Java)
1 题目2 Java核心就是利用二叉搜索树的性质,中序序列严格升序步骤如下:1 先找到需要交换的两个节点(发生降序)2 将两个节点值交换2.1 方法一(中序递归)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...原创 2020-02-23 13:21:46 · 313 阅读 · 0 评论 -
124. 二叉树中的最大路径和(Java)
1 题目2 Java题意难理解2.1 方法一(后续递归)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } ...原创 2020-02-23 02:02:11 · 146 阅读 · 0 评论 -
面试题 04.05. 合法二叉搜索树(Java)
1 题目https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/2 Java2.1 方法一(易错递归)这种做法仅保证了每个子树的,左节点值 < 根节点值,根节点值 > 右节点值但二叉搜索树的定义是:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大...原创 2020-02-22 16:44:08 · 256 阅读 · 0 评论 -
面试题55 - II. 平衡二叉树(110. 平衡二叉树)(Java)
1 题目https://leetcode-cn.com/problems/balanced-binary-tree/2 Java2.1 方法一(两层递归)先写出求某个节点的层数的方法layerNum,这是第一层递归再写出求某个节点是否平衡的方法isBalanced,这是第二层递归某节点层数 = max(左节点层数,右节点层数)+ 1某节点平衡 = 本身平衡 & 左节点平衡 ...原创 2020-02-21 00:00:39 · 167 阅读 · 0 评论 -
面试题27. 二叉树的镜像(226. 翻转二叉树)(Java)(后序递归,翻转原树)(后序递归,翻转出新树,原树保留)(队列迭代)
1 题目2 Java2.1 方法一(递归)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */c...原创 2020-02-21 23:37:53 · 143 阅读 · 0 评论 -
面试题28. 对称的二叉树(101. 对称二叉树)(Java)(遍历递归;翻转二叉树 + 判断二叉树是否一样)(遍历递归)(队列)
1 题目请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false限制:0 <= 节点个数 <= 1000来源:力扣(LeetCode)链接:https://leet...原创 2020-02-21 23:03:23 · 188 阅读 · 0 评论