二叉树
失业边缘,疯狂挣扎
这个作者很懒,什么都没留下…
展开
-
二叉树中俩节点的最短距离(pdd正式批2面)
1 题目 如题 2 Java 2.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 · 195 阅读 · 0 评论 -
098. 验证二叉搜索树(中序递归)
1 题目 链接:验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / 1 3 输出: true 示例 2: 输入: 5 / 1 4 / 3 6 输出: false 解释: 输入为: [5...原创 2019-09-12 22:06:18 · 64 阅读 · 0 评论 -
437. 路径总和 III(Java)(树递归,回溯)
1 题目 给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-iii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2 Java 2.1原创 2020-07-04 20:25:23 · 142 阅读 · 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 · 163 阅读 · 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 Java 2.1 方法一(递归) /原创 2020-05-13 15:54:28 · 100 阅读 · 0 评论 -
112. 路径总和(Java)(回溯)
1 题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ ...原创 2020-04-07 14:42:31 · 159 阅读 · 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 · 93 阅读 · 0 评论 -
面试题32 - II. 从上到下打印二叉树 II(Java)(层序迭代,队列)(前序递归+递归参数level)
1 题目 2 Java 2.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 · 86 阅读 · 0 评论 -
面试题32 - I. 从上到下打印二叉树(Java)(迭代,队列)
1 题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2 Java 2.1 方法一(迭代,队列) 就是层序遍历过程,利用队列 /** * Definition for a binar...原创 2020-03-08 15:56:53 · 93 阅读 · 0 评论 -
面试题36. 二叉搜索树与双向链表(Java)(中序遍历 + 成员变量记录遍历的上一节点 + 头尾节点处理)
1 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 下图展示了上面的二叉搜索树转化成的链表。“head...原创 2020-03-08 14:45:59 · 106 阅读 · 0 评论 -
面试题33. 二叉搜索树的后序遍历序列(Java)
1 题目 2 Java 2.1 方法一(递归) 核心是,一段后序遍历数组,分左右根三部分,最后一个元素是根节点,前面分为两部分(左子树和右子树),前一部分都比根节点小,中间一部分都比根节点大 递归思路:针对一段数组,从左开始遍历,先都比最后一个元素小,接着都比最后一个元素大,然后停止,若无法遍历到最后一个元素,说明该段数组不可能是任何二叉搜索树的后序遍历 class Solution { ...原创 2020-03-07 18:34:05 · 80 阅读 · 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 · 135 阅读 · 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 · 101 阅读 · 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 · 75 阅读 · 0 评论 -
心得:成员变量、方法外局域变量、方法内局域变量,三者各自与递归方法的关系
做二叉树的题,面试题34. 二叉树中和为某一值的路径,对各种变量在递归方法中起到的作用感到很乱,整理一下 进一步思考成员变量、方法外局域变量、方法内局域变量,三者各自与递归方法的关系: 方法内局域变量:只有作为返回值才能跨层记录结果,且仅能跨一层。记录or操作下层返回值,并在处理后作为返回值返回上层 方法外局域变量:相当于全局变量,可跨多层记录结果,但必须作为递归方法的参数才能使用 成员变量:完完...原创 2020-03-06 19:45:04 · 121 阅读 · 0 评论 -
面试题34. 二叉树中和为某一值的路径(113. 路径总和 II)(Java)(树递归)
1 题目 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 ...原创 2020-03-06 19:42:43 · 121 阅读 · 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 · 109 阅读 · 0 评论 -
662. 二叉树最大宽度(Java)
1 题目 给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximu...原创 2020-02-25 15:20:44 · 764 阅读 · 0 评论 -
96. 不同的二叉搜索树(Java)
1 题目 2 Java 本题虽然是树的递归,但可以看做动态规划 原因是常规树的递归每个子问题的结果都不一样,无法建立备忘录优化 本题只求个数,[1,2,3]和[2,3,4]两组构成二叉树的数量是一样的,可以建立备忘录优化 2.1 方法一(递归;可看做动态规划) numi = (num1 * num2)i代表: i为选定的根节点,0 ~ i-1作为左子树,i+1 ~ n是右子树,且0 ~ i-1构...原创 2020-02-24 15:17:12 · 168 阅读 · 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 · 275 阅读 · 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 · 108 阅读 · 0 评论 -
面试题 04.05. 合法二叉搜索树(Java)
1 题目 https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/ 2 Java 2.1 方法一(易错递归) 这种做法仅保证了每个子树的,左节点值 < 根节点值,根节点值 > 右节点值 但二叉搜索树的定义是:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大...原创 2020-02-22 16:44:08 · 176 阅读 · 0 评论 -
面试题27. 二叉树的镜像(226. 翻转二叉树)(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; } * } */ c...原创 2020-02-21 23:37:53 · 108 阅读 · 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 · 145 阅读 · 0 评论 -
面试题07. 重建二叉树(105. 从前序与中序遍历序列构造二叉树)(Java)(分治递归,先分后治)(HashMap加速数组索引获取)
1 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 限制: 0 <= 节点个数 <= 5000 来源:力扣(LeetCode) 链接:https://leetcode...原创 2020-02-21 18:00:55 · 128 阅读 · 0 评论 -
面试题55 - II. 平衡二叉树(110. 平衡二叉树)(Java)
1 题目 https://leetcode-cn.com/problems/balanced-binary-tree/ 2 Java 2.1 方法一(两层递归) 先写出求某个节点的层数的方法layerNum,这是第一层递归 再写出求某个节点是否平衡的方法isBalanced,这是第二层递归 某节点层数 = max(左节点层数,右节点层数)+ 1 某节点平衡 = 本身平衡 & 左节点平衡 ...原创 2020-02-21 00:00:39 · 144 阅读 · 0 评论 -
94. 二叉树的后序遍历(Python、Java)
1 题目 链接:二叉树的后序遍历 给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 2 Python 2.1 方法一:迭代 # Definition for a binary tree node. # class TreeNode: # def __init__(s...原创 2019-08-28 12:08:02 · 138 阅读 · 0 评论 -
94. 二叉树的中序遍历(Python、Java)
1 题目 链接:二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 2 Python 2.1 方法一:递归 # Definition for a binary tree node. # class TreeNode: # def __init...原创 2019-08-27 21:07:36 · 123 阅读 · 0 评论 -
144. 二叉树的前序遍历(Python、Java)
1 题目 链接:二叉树的前序遍历 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 2 Python 2.1 方法一:迭代 # Definition for a binary tree node. # class TreeNode: # def __init__(s...原创 2019-08-28 10:54:21 · 159 阅读 · 0 评论