![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode-树
LeetCode-树
欢脱的婷子
每天努力一点点!
展开
-
LeetCode # 109 有序链表转换二叉搜索树
leetcode链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平原创 2020-08-18 10:46:59 · 187 阅读 · 0 评论 -
剑指offer -- 二叉树的深度
leetcode链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof/输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。解题思路:树的问题使用递归来求解,分别递归求...原创 2020-08-04 11:15:43 · 96 阅读 · 0 评论 -
剑指offer -- 二叉搜索树的第k大节点
leetcode链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \...原创 2020-08-04 10:55:08 · 143 阅读 · 0 评论 -
剑指offer -- 序列化二叉树
leetcode链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 "[1,2,3,null,null,4,5]"解题思路:由题可知,序列化反序列化使用的是二叉树的前序遍历序列,因此在序列化的时候,将二叉树进行前序遍历,依次追加到序列化字符串中,若...原创 2020-08-02 09:45:07 · 115 阅读 · 0 评论 -
剑指offer -- 二叉搜索树与双向链表
leetcode链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。“head” 表示指向链表中有最原创 2020-08-02 09:29:59 · 102 阅读 · 0 评论 -
剑指offer -- 二叉树中和为某一值的路径
leetcode链接:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 ...原创 2020-08-02 09:13:32 · 83 阅读 · 0 评论 -
剑指offer -- 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true解题思路:根据二叉搜索树的性质,其根节点左子树上的元素都小于根节点,右子树上的元素都大于根节点,且左右子树均满足此条件...原创 2020-08-02 09:02:09 · 67 阅读 · 0 评论 -
剑指offer -- 从上到下打印二叉树Ⅲ
leetcode链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结...原创 2020-08-02 08:53:10 · 80 阅读 · 0 评论 -
剑指offer -- 从上到下打印二叉树Ⅱ
leetcode链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]...原创 2020-08-02 08:48:17 · 86 阅读 · 0 评论 -
剑指offer -- 从上到下打印二叉树Ⅰ
leetcode链接:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]解题思路:相当于层次遍历二叉树,使用一个辅助队列来实现,先将根节点入队,当队列不为空时,出队,加入遍历序列,将出队元素的左右节点入队,直到队列为空, 返回遍历序列即可。/** * Definition for ...原创 2020-08-01 10:12:14 · 83 阅读 · 0 评论 -
剑指offer -- 二叉树的镜像
leetcode链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7/ \ / \1 3 6 9镜像输出: 4 / \ 7 2/ \ / \9 6 3 1解题思路:根据树的性质,使用递归的方式,分别镜像这颗树的左右子树,新建一个...原创 2020-08-01 09:32:33 · 87 阅读 · 0 评论 -
剑指offer -- 重建二叉树
leetcode链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路:...原创 2020-07-30 09:23:16 · 100 阅读 · 0 评论 -
LeetCode # 501 寻找二叉查找树中出现次数最多的值
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST[1,null,2,2], 1 \ 2 / 2返回[2].解题思路:由于二叉树的特性,中序遍历后,节点值相同的一定是紧挨着的,所以可以用中序遍历来做,记录当前节点的pre节点,用来比较两.原创 2020-05-24 10:22:04 · 856 阅读 · 0 评论 -
LeetCode # 530 二叉查找树中查找两个节点之差的最小绝对值
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。解题思路1: 这道题和上一道求和的题十分相似,不同的是差的绝对值最小值只能出现在相邻的两个节点之间,因此可以与上次一样,手下中序遍历树得到一个有序的链表,然后遍历链表,找出差的绝对值最小值。class Solution { L...原创 2020-05-24 09:49:14 · 1025 阅读 · 0 评论 -
LeetCode # 653 在二叉查找树中寻找两个节点,使它们的和为一个给定值
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:输入: 5 / \ 3 6/ \ \2 4 7Target = 9输出: True案例 2:输入: 5 / \ 3 6/ \ \2 4 7Target = 28输出: False解题思路:这道题很明显不可以使用递归左右子树的方法来解题,由于是二叉查找树,那么我们可以中...原创 2020-05-24 09:26:50 · 274 阅读 · 0 评论 -
LeetCode # 109 有序链表构造平衡的二叉查找树
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5解题思路:这道题与上一题的根据有序的数组构造二叉查找树相同,唯一不...原创 2020-05-23 12:00:21 · 259 阅读 · 0 评论 -
LeetCode # 108 从有序数组中构造二叉查找树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5解题思路: 构造二叉平衡树,由于数组是有序的,所以最简单的方法就是用数组的中间元素作为根节点,左半...原创 2020-05-23 11:30:56 · 348 阅读 · 0 评论 -
LeetCode # 236 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5..原创 2020-05-23 10:54:55 · 128 阅读 · 0 评论 -
LeetCode # 235 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: ..原创 2020-05-23 10:19:14 · 106 阅读 · 0 评论 -
LeetCode # 538 把二叉查找树每个节点的值都加上比它大的节点的值
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / \ 20 13解题思路: 每个节点累加,根据二叉搜索树的性质,其实就是按...原创 2020-05-22 18:14:31 · 264 阅读 · 0 评论 -
LeetCode # 230 寻找二叉查找树的第 k 个元素
给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4...原创 2020-05-22 17:03:27 · 148 阅读 · 0 评论 -
LeetCode # 669 修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L和最大边界R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入: 1 / \ 0 2 L = 1 R = 2输出: 1 \ 2示例 2:输入: 3 / \ 0 4 \ 2 / 1 L = 1 R = 3输出:...原创 2020-05-22 10:16:28 · 128 阅读 · 0 评论 -
LeetCode 非递归遍历树。
1、给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]代码:class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); Stac...原创 2020-05-22 09:49:00 · 125 阅读 · 0 评论 -
LeetCode # 513 得到树左下角的节点
给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入: 2 / \ 1 3输出:1示例 2:输入: 1 / \ 2 3 / / \ 4 5 6 / 7输出:7解题思路:可以把这个问题分为两个部分,最左下节点,第一步需要找到最后一层节点,第二步找最后一层节点中最左边的节点。那就可以采用层次遍历的方法,在层次遍历中,先遍历右子树,后遍历左...原创 2020-05-21 10:43:35 · 139 阅读 · 0 评论 -
LeetCode # 637 树每层节点的平均数
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].解题思路:使用广度优先遍历的方法,用一个队列来辅助进行,广度遍历每一层节点时,计算节点个数个节点值的和,求出每层的平均值。class Solution { public List...原创 2020-05-21 10:17:11 · 190 阅读 · 0 评论 -
LeetCode # 337 间隔遍历
在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3 / \ 2 3 \ \...原创 2020-05-21 09:58:18 · 187 阅读 · 0 评论 -
LeetCode # 671 二叉树中第二小的节点
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为2或0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入: 2 / \ 2 5 / \ 5 7输出: 5说明: 最小的值是 2 ,第二小的值是 5 。示例 2:输入: 2 / \ 2 2输出: -1说明:...原创 2020-05-20 16:03:26 · 86 阅读 · 0 评论 -
LeetCode # 687 节点值相同的最大路径长度
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。示例 1:输入: 5 / \ 4 5 / \ \ 1 1 5输出:2示例 2:输入: 1 / \ 4 5...原创 2020-05-20 10:54:22 · 142 阅读 · 0 评论 -
LeetCode # 404 统计左叶子节点的和
计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24解题思路: 依旧采用递归的方式,遍历的当前节点为null,则返回0,当遍历的当前节点左节点是叶子节点,返回左节点的值加当前节点右子树中左叶子节点的和,否则返回当前节点左右子树中左叶子节点的和。class Solution { public int sumOfLeftLeaves(TreeNod原创 2020-05-20 08:53:24 · 155 阅读 · 0 评论 -
LeetCode # 111 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.解题思路:树的问题,我们依然采用递归的方法。若当前节点为null,则返回0,若当前节点的左子树或者右子树其中有一个为null,则直接返回不为null的子树的深度+1,否则,直接返回左右子树的最小深度+1。class Soluti...原创 2020-05-20 08:38:39 · 132 阅读 · 2 评论 -
LeetCode # 101 镜像二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3解题思路:树的问题,还是老样子,用递归比较简单,首先,判断一个二叉树是否是镜像的,就要分别判断它的两棵子树是否是镜像的。判断两棵子树是否是镜像的,需要分别...原创 2020-05-19 09:34:43 · 96 阅读 · 0 评论 -
LeetCode # 572 树的子树
给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \1 2给定的树 t: 4 / \1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。解题思路: 树的问题,依旧采用递归的方法,二叉树s中是否包含子树t,等价于以s的根节点为根节点开始...原创 2020-05-19 09:17:15 · 149 阅读 · 0 评论 -
LeetCode # 437 统计路径和等于一个数的路径数量
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11/ \ \3 -2 1返回 3。和等于 8 的路径有:1. 5 ->...原创 2020-05-18 10:11:56 · 395 阅读 · 0 评论 -
LeetCode # 112 判断路径总和是否等于一个数
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5-&g...原创 2020-05-18 09:43:53 · 91 阅读 · 0 评论 -
LeetCode # 617 归并两棵树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 1 2...原创 2020-05-18 09:34:20 · 244 阅读 · 0 评论 -
LeetCode # 226 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1解题思路:递归地翻转当前节点的左右子树,当前节点的左子树由翻转当前节点的右子树得到,当前节点的右子树由翻转当前节点的左子树得到。class Solution { public TreeNode invertTree(TreeNode root) ...原创 2020-05-17 16:36:55 · 69 阅读 · 0 评论 -
LeetCode # 543 二叉树中两节点的最长路径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。解题思路:由题可知,两个节点之间路径长度的最大值一定会出现在某个节点左右子树高度之和,所以采用递归的方法,分别计算每个节点左右子树...原创 2020-05-17 12:05:27 · 1941 阅读 · 0 评论 -
LeetCode # 110 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。解题思路:分别计算左右子树的高度,若树中某一节点左右子树高度相差大于1,返回false。class Solution { private boolean result ...原创 2020-05-17 11:24:32 · 108 阅读 · 0 评论 -
LeetCode # 104 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。解题思路:分别找左右子树的高度,返回较大的高度值+1。class Solution { public int maxDepth(TreeNode root) { ...原创 2020-05-17 11:03:24 · 92 阅读 · 0 评论