二叉树
失业边缘,疯狂挣扎
这个作者很懒,什么都没留下…
展开
-
二叉树中俩节点的最短距离(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 · 209 阅读 · 0 评论 -
098. 验证二叉搜索树(中序递归)
1 题目链接:验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5...原创 2019-09-12 22:06:18 · 90 阅读 · 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 · 173 阅读 · 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 · 188 阅读 · 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 · 110 阅读 · 0 评论 -
112. 路径总和(Java)(回溯)
1 题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ ...原创 2020-04-07 14:42:31 · 212 阅读 · 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 · 118 阅读 · 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 · 96 阅读 · 0 评论 -
面试题32 - I. 从上到下打印二叉树(Java)(迭代,队列)
1 题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2 Java2.1 方法一(迭代,队列)就是层序遍历过程,利用队列/** * Definition for a binar...原创 2020-03-08 15:56:53 · 126 阅读 · 0 评论 -
面试题36. 二叉搜索树与双向链表(Java)(中序遍历 + 成员变量记录遍历的上一节点 + 头尾节点处理)
1 题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head...原创 2020-03-08 14:45:59 · 157 阅读 · 0 评论 -
面试题33. 二叉搜索树的后序遍历序列(Java)
1 题目2 Java2.1 方法一(递归)核心是,一段后序遍历数组,分左右根三部分,最后一个元素是根节点,前面分为两部分(左子树和右子树),前一部分都比根节点小,中间一部分都比根节点大递归思路:针对一段数组,从左开始遍历,先都比最后一个元素小,接着都比最后一个元素大,然后停止,若无法遍历到最后一个元素,说明该段数组不可能是任何二叉搜索树的后序遍历class Solution { ...原创 2020-03-07 18:34:05 · 106 阅读 · 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 · 163 阅读 · 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 · 130 阅读 · 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 · 103 阅读 · 0 评论 -
心得:成员变量、方法外局域变量、方法内局域变量,三者各自与递归方法的关系
做二叉树的题,面试题34. 二叉树中和为某一值的路径,对各种变量在递归方法中起到的作用感到很乱,整理一下进一步思考成员变量、方法外局域变量、方法内局域变量,三者各自与递归方法的关系:方法内局域变量:只有作为返回值才能跨层记录结果,且仅能跨一层。记录or操作下层返回值,并在处理后作为返回值返回上层方法外局域变量:相当于全局变量,可跨多层记录结果,但必须作为递归方法的参数才能使用成员变量:完完...原创 2020-03-06 19:45:04 · 128 阅读 · 0 评论 -
面试题34. 二叉树中和为某一值的路径(113. 路径总和 II)(Java)(树递归)
1 题目输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 ...原创 2020-03-06 19:42:43 · 129 阅读 · 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 · 139 阅读 · 0 评论 -
662. 二叉树最大宽度(Java)
1 题目给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximu...原创 2020-02-25 15:20:44 · 804 阅读 · 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 · 224 阅读 · 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 · 288 阅读 · 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 · 135 阅读 · 0 评论 -
面试题 04.05. 合法二叉搜索树(Java)
1 题目https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/2 Java2.1 方法一(易错递归)这种做法仅保证了每个子树的,左节点值 < 根节点值,根节点值 > 右节点值但二叉搜索树的定义是:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大...原创 2020-02-22 16:44:08 · 225 阅读 · 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 · 133 阅读 · 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 · 176 阅读 · 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 · 156 阅读 · 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 · 149 阅读 · 0 评论 -
94. 二叉树的后序遍历(Python、Java)
1 题目链接:二叉树的后序遍历给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?2 Python2.1 方法一:迭代# Definition for a binary tree node.# class TreeNode:# def __init__(s...原创 2019-08-28 12:08:02 · 170 阅读 · 0 评论 -
94. 二叉树的中序遍历(Python、Java)
1 题目链接:二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]1 \ 2 /3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?2 Python2.1 方法一:递归# Definition for a binary tree node.# class TreeNode:# def __init...原创 2019-08-27 21:07:36 · 131 阅读 · 0 评论 -
144. 二叉树的前序遍历(Python、Java)
1 题目链接:二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?2 Python2.1 方法一:迭代# Definition for a binary tree node.# class TreeNode:# def __init__(s...原创 2019-08-28 10:54:21 · 185 阅读 · 0 评论