二叉树篇
文章平均质量分 54
二叉树算法题整理
小唐要努力
这个作者很懒,什么都没留下…
展开
-
二叉树算法题(25)把二叉搜索树转换为累加树
目录把二叉搜索树转换为累加树描述示例 1示例 2示例 3示例 4提示方法:递归把二叉搜索树转换为累加树描述给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node的新值等于原树中大于或等于node.val的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须是二叉搜索树。示...原创 2021-11-03 20:37:13 · 83 阅读 · 0 评论 -
二叉树算法题(24)将有序数组转换为二叉搜索树
目录将有序数组转换为二叉搜索树描述示例 1示例 2提示方法:递归将有序数组转换为二叉搜索树描述给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视原创 2021-11-03 20:16:02 · 56 阅读 · 0 评论 -
二叉树算法题(23)修剪二叉搜索树
修剪二叉搜索树描述给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。示例 1输入:root = [1,0,2], low = 1, high = 2输出:[1,null...原创 2021-11-03 17:27:05 · 177 阅读 · 0 评论 -
二叉树算法题(22)删除二叉搜索树中的节点
删除二叉搜索树中的节点描述原创 2021-11-03 16:01:36 · 209 阅读 · 0 评论 -
二叉树算法题(21)二叉搜索树中的插入操作
目录二叉搜索树中的插入操作描述示例 1示例 2示例 3提示方法:递归二叉搜索树中的插入操作描述给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,原创 2021-11-03 15:14:42 · 261 阅读 · 0 评论 -
二叉树算法题(20)二叉搜索树的最近公共祖先
目录二叉搜索树的最近公共祖先描述示例 1示例 2示例 3提示方法:递归二叉搜索树的最近公共祖先描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q =原创 2021-11-03 14:53:02 · 355 阅读 · 0 评论 -
二叉树算法题(19)二叉树的最近公共祖先
二叉树的最近公共祖先描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3示例 2输...原创 2021-11-03 14:41:51 · 114 阅读 · 0 评论 -
二叉树算法题(18)二叉搜索树中的众数
二叉搜索树中的众数描述给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树示例给定 BST [1,null,2,2], 1 \ 2 / 2返回[2]提示:如果众数超过1个,不需考虑输出顺序进阶:你可以不使用额外的空间吗?(假设由递归产生...原创 2021-11-01 11:56:56 · 65 阅读 · 0 评论 -
二叉树算法题(17)二叉搜索树的最小绝对差
目录二叉搜索树的最小绝对差描述示例方法:递归二叉搜索树的最小绝对差描述给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例输入:1\3/2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。提示:树中至少有 2 个节点。方法:递归因为本题要计算两节点的差的绝对值最小值,我们中序遍历就可以得到一个升序的数组,然后依...原创 2021-10-30 14:37:27 · 138 阅读 · 0 评论 -
二叉树算法题(16)验证二叉搜索树
目录验证二叉搜索树描述示例 1示例 2提示方法:递归验证二叉搜索树描述给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1输入:root = [2,1,3]输出:true示例 2输入:root = [5,1,4,null,null,3,6].原创 2021-10-30 12:55:42 · 185 阅读 · 0 评论 -
二叉树算法题(15)二叉搜索树中的搜索
目录二叉搜索树中的搜索描述示例方法:递归二叉搜索树中的搜索描述给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。示例给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值:2你应该返回如下子树: 2 / \ 1 3在上述示例中,如...原创 2021-10-29 21:33:10 · 71 阅读 · 0 评论 -
二叉树算法题(14)合并二叉树
目录合并二叉树描述示例1方法:递归合并二叉树描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1输入: Tree 1 Tree 2 1 ...原创 2021-10-29 20:08:42 · 131 阅读 · 0 评论 -
二叉树算法题(13)最大二叉树
最大二叉树描述给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素 左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树 右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树返回有给定数组 nums 构建的 最大二叉树 。示例 1输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:- [3...原创 2021-10-29 19:19:34 · 533 阅读 · 1 评论 -
二叉树算法题(12)从中序与后续遍历序列构造二叉树
目录从中序与后续遍历序列构造二叉树描述示例方法:递归从中序与后续遍历序列构造二叉树描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。示例中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7方法:递归我们可以根据中序遍历和后序遍历的特点来做这个题。...原创 2021-10-29 16:51:20 · 304 阅读 · 0 评论 -
二叉树算法题(11)路径总和
目录路径总和描述示例 1示例 2示例 3提示方法:递归路径总和描述给你二叉树的根节点root 和一个表示目标和的整数targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。叶子节点 是指没有子节点的节点。示例 1输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例...原创 2021-10-29 10:51:22 · 157 阅读 · 0 评论 -
二叉树算法题(10)找树左下角的值
目录找树左下角的值描述示例 1示例 2提示方法一:层序遍历方法二:递归找树左下角的值描述给定一个二叉树的 根节点 root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。示例 1输入: root = [2,1,3]输出: 1示例 2输入: [1,2,3,4,null,5,6,null,null,7]输出: 7提示二叉树的节点个数的范围是 方法一:层序遍历这题用层序遍历比较...原创 2021-10-29 10:39:00 · 220 阅读 · 0 评论 -
二叉树算法题(9)左叶子之和
目录左叶子之和描述示例方法:递归左叶子之和描述计算给定二叉树的所有左叶子之和。示例 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24方法:递归递归遍历每个节点,判断是否为左叶子节点:是左叶子节点:将节点的值加上 是右叶子节点:不加 不是叶子节点:继续递归查询左叶子节点class Solution { public int sumOf...原创 2021-10-29 10:12:21 · 172 阅读 · 0 评论 -
二叉树算法题(8)二叉树的所有路径
二叉树的所有路径描述原创 2021-10-29 09:48:05 · 118 阅读 · 0 评论 -
二叉树算法题(7)平衡二叉树
目录平衡二叉树描述示例 1示例 2示例 3提示方法:递归平衡二叉树描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1示例 1输入:root = [3,9,20,null,null,15,7]输出:true示例 2输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3输入:..原创 2021-10-29 09:15:19 · 240 阅读 · 0 评论 -
二叉树算法题(6)完全二叉树的节点个数
目录完全二叉树的节点个数描述示例 1示例 2示例 3提示方法:递归优化完全二叉树的节点个数描述给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。示例 1输入:root = [1,2,3,4,5,6]输出:6示例 2输入:r..原创 2021-10-28 21:18:00 · 777 阅读 · 0 评论 -
二叉树算法题(5)二叉树的最小深度
目录二叉树的最小深度描述示例 1示例 2提示方法:递归二叉树的最小深度描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1输入:root = [3,9,20,null,null,15,7]输出:2示例 2输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示树中节点数的范围在 内 方法.原创 2021-10-28 20:21:10 · 186 阅读 · 0 评论 -
二叉树算法题(4)二叉树的最大深度
目录二叉树的最大深度描述示例方法:递归二叉树的最大深度描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回它的最大深度3方法:递归其实本题说到底和前面的题类似,都是对二叉树进行遍历,分左右子树进行访问,访问到了则层...原创 2021-10-28 19:50:32 · 174 阅读 · 0 评论 -
二叉树算法题(3)对称二叉树
目录对称二叉树描述方法一:迭代方法二:递归对称二叉树描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[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进阶:你可以运用递归和迭代两种方法解决这个问题吗?方法一:迭代...原创 2021-10-28 17:06:28 · 45 阅读 · 0 评论 -
二叉树算法题(2)翻转二叉树
目录翻转二叉树描述示例方法:递归方法二:迭代+队列翻转二叉树描述翻转一棵二叉树。示例输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1方法:递归二叉树的题一般都可以用递归做,首先我们将当前节点的左右子树互换,然后递归交换左右子树。class Solution { pub...原创 2021-10-28 16:25:02 · 97 阅读 · 0 评论 -
二叉树算法题(1)层序遍历
目录层序遍历描述示例数据结构方法一:队列+迭代方法二:递归+前序遍历层序遍历描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例二叉树:[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]数据结构public class TreeN...原创 2021-10-28 16:13:39 · 78 阅读 · 0 评论