![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode题解-树
文章平均质量分 56
艾恩iron
这个作者很懒,什么都没留下…
展开
-
589.N叉树的前序遍历
题目给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个 3叉树 :返回其前序遍历: [1,3,5,6,2,4]。分析与二叉搜索树的遍历一致,有两种方法代码第一种:使用迭代方法 /** * 非递归遍历,速度比较慢 * * @param root * @return */ public List<Intege...原创 2019-07-23 16:03:41 · 76 阅读 · 0 评论 -
257.二叉树的所有路径
题目给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3分析这道题比较简单,存储每个节点的值,当当前节点的左孩子和右孩子都为空...原创 2019-07-26 12:30:10 · 137 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
题目给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / ...原创 2019-07-26 12:34:21 · 112 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
题目给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。示例 :输入: 1 \ 3 / 2输出:1解释:最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。注意: 树中至少有2个节点。分析对于一个节点来说,离他最近的节点是左子树的最大节点和右子树的最小节点,遍历节点得到这两个节点的值分别与...原创 2019-07-26 12:41:14 · 122 阅读 · 0 评论 -
100.相同的树
题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 ...原创 2019-07-26 12:53:32 · 118 阅读 · 0 评论 -
404. 左叶子之和
题目计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24分析首先一个节点的左右子树都为空,那么这个节点是叶子节点,另外如果我们需要遍历的是叶子节点父节点,这样才能决定是否是左叶子.代码 public int sumOfLeftLeaves(T...原创 2019-07-26 12:58:52 · 130 阅读 · 0 评论 -
938.二叉搜索树的范围和
题目给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10输出:23分析这道题要求的就是一棵树...原创 2019-07-23 15:01:18 · 148 阅读 · 0 评论 -
226.翻转二叉树
题目翻转一颗二叉树.示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1分析因为要对每一个子树进行翻转,显然这道题要使用递归的方式对每个子树进行翻转.代码 public TreeNode invertTree(T...原创 2019-07-23 15:07:41 · 86 阅读 · 0 评论 -
104.二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。分析使用递归方式计算,获取其左子树和右子树的深度,比较两个深度的大小,决定最终的深...原创 2019-07-23 15:41:28 · 178 阅读 · 0 评论 -
437.路径总和 III
题目给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 ...原创 2019-08-09 11:23:14 · 200 阅读 · 0 评论 -
637.二叉树的层平均值
题目给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].注意:节点值的范围在32位有符号整数范围内。分析有两种解法:第一种,使用层序...原创 2019-07-26 12:27:06 · 189 阅读 · 0 评论 -
965.单值二叉树
题目如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1, 100]。每个节点的值都是整数,范围为 [0, 99] 。分析这道题也非常简...原创 2019-07-26 12:19:25 · 162 阅读 · 0 评论 -
108.将有序数组转换为二叉搜索树
题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10...原创 2019-07-26 12:15:11 · 93 阅读 · 0 评论 -
590.N叉树的后序遍历
题目给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :返回其后序遍历: [5,6,3,2,4,1].分析与二叉树的后序相同,只是需要对列表做处理代码 /** * 递归算法,最快的算法 * @param root * @return */ public List<Integer> postorder(N...原创 2019-07-23 17:52:30 · 121 阅读 · 0 评论 -
700.二叉搜索树中的搜索
题目给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在...原创 2019-07-23 17:58:05 · 152 阅读 · 0 评论 -
559.N叉树的最大深度
题目给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个 3叉树 :我们应返回其最大深度,3。分析与二叉树的思维一致,找出所有子树深度最大的那个并返回.代码 /** * 递归算法 * @param root * @return */ public int maxDepth(No...原创 2019-07-23 18:01:30 · 95 阅读 · 0 评论 -
429. N叉树的层序遍历
题目给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个 3叉树 : 返回其层序遍历:[[1],[3,2,4],[5,6]]分析此题有两种解法:第一种仍然是像遍历二叉树一样遍历,但是要注意的是,这里是N叉树,所以需要两个队列.第二种则是使用递归方式,效率更高一下代码解法1: /** * 土鳖做法:用父子队列来做,效率很低 ...原创 2019-07-24 11:33:14 · 144 阅读 · 0 评论 -
669. 修剪二叉搜索树
题目给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入: 1 / \ 0 2 L = 1 R = 2输出: 1 \ 2示例 2:输入: ...原创 2019-07-24 14:06:01 · 137 阅读 · 0 评论 -
107.二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]分析这个遍历与普通的层次遍历差别在与需要返回...原创 2019-07-24 14:27:41 · 104 阅读 · 0 评论 -
872. 叶子相似的树
题目请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。分析需要注意的是,这道题需要的是叶子...原创 2019-07-24 16:17:56 · 100 阅读 · 0 评论 -
897. 递增顺序查找树
题目给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :输入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9输出:[1,...原创 2019-07-24 17:44:14 · 109 阅读 · 0 评论 -
617.合并二叉树
题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 ...原创 2019-07-26 12:10:44 · 245 阅读 · 0 评论 -
606.根据二叉树创建字符串
题目你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是...原创 2019-08-09 15:23:13 · 211 阅读 · 0 评论