leetcode-二叉树
KobeSacre
这个作者很懒,什么都没留下…
展开
-
平衡二叉树
leetcode原创 2022-10-25 11:16:00 · 101 阅读 · 0 评论 -
二叉树的深度
leetcode原创 2022-10-21 15:43:20 · 131 阅读 · 0 评论 -
二叉搜索树的第k大节点
leetcode原创 2022-10-21 15:17:35 · 241 阅读 · 0 评论 -
二叉搜索树与双向链表
leetcode原创 2022-09-28 10:15:50 · 77 阅读 · 0 评论 -
二叉树中和为某一值的路径
leetcode原创 2022-09-26 14:25:11 · 63 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
leetcode原创 2022-09-26 11:14:27 · 80 阅读 · 0 评论 -
对称的二叉树
leetcode原创 2022-09-22 10:26:24 · 150 阅读 · 0 评论 -
二叉树的镜像
leetcode原创 2022-09-22 10:13:53 · 611 阅读 · 0 评论 -
树的子结构
leetcode原创 2022-09-21 09:53:51 · 153 阅读 · 0 评论 -
路径总和 III
路径总和 III题目:给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例 1:输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。示例 2:输入:root = [5,4,8,11原创 2022-05-16 11:23:13 · 106 阅读 · 0 评论 -
从根节点到叶节点的路径数字之和
从根节点到叶节点的路径数字之和题目:给定一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。示例 1:输入:root = [1,2,3]输出:25解释:从根到叶子节点路径 1->2 代表数字 12从根到叶子节点路径 1->3 代表数字原创 2022-04-26 11:25:22 · 949 阅读 · 0 评论 -
二叉树剪枝
二叉树剪枝题目:给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。节点 node 的子树为 node 本身,以及所有 node 的后代。示例 1:输入: [1,null,0,0,1]输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。示例 2:输入: [1,0,1,0,0,0,1]输出: [1,null,1,null,1]解释: 示例.原创 2022-04-19 15:32:57 · 221 阅读 · 0 评论 -
二叉树的右侧视图
二叉树的右侧视图题目:给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []解题思路: 找树左下角的值相似,只不过本题是找每一层最右边的值/** * Definition for a binary tree node. * public cla原创 2022-04-18 16:25:54 · 336 阅读 · 0 评论 -
找树左下角的值
找树左下角的值题目:给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。 示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7解题思路:使用层序遍历找到每一层的最左边节点即可/** * Definition for a binary tree node. * public class TreeNode { *原创 2022-04-18 15:33:56 · 190 阅读 · 0 评论 -
二叉树每层的最大值
二叉树每层的最大值题目:给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。示例1:输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]解释: 1 / \ 3 2 / \ \ 5 3 9 示例2:输入: root = [1,2,3]输出: [1,3]解释: 1 / \ 2 3示例3原创 2022-04-18 15:01:58 · 991 阅读 · 0 评论 -
将二叉树按照层级转化为链表
将二叉树按照层级转化为链表题目:描述给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有 D 层,那么你需要创建 D 条链表。样例样例 1:输入: {1,2,3,4}输出: [1->null,2->3->null,4->null]解释: 1 / \ 2 3 / 4样例 2:输入: {1,#,2,3}输出: [1->null,2->null,3->原创 2021-09-29 19:05:54 · 104 阅读 · 0 评论 -
二叉树的序列化和反序列化
二叉树的序列化和反序列化题目:描述设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。对二进制树进行反序列化或序列化的方式没有限制,LintCode 将您的 serialize 输出作为 deserialize 的输入,它不会检查序列化的结果。样例样例 1:输入:tree = {3,9,2原创 2021-09-29 16:12:09 · 113 阅读 · 0 评论 -
二叉搜索树迭代器
二叉搜索树迭代器题目:实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int next()将指针向右移动原创 2021-08-25 16:50:53 · 90 阅读 · 0 评论 -
将二叉树转换成双链表
将二叉树转换成双链表题目:描述将一个二叉树按照中序遍历转换成双向链表。样例样例 1:输入: 4 / \ 2 5 / \ 1 3 输出: 1<->2<->3<->4<->5样例 2:输入: 3 / \ 4 1输出:4<->3<->1解题思路1:先用队列存储二叉树中序遍历结果,然后遍历队列建立双向链表/** * Definition f原创 2021-07-06 10:52:18 · 464 阅读 · 0 评论 -
有序链表转换二叉搜索树
有序链表转换二叉搜索树题目:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5解题思路:因为输入数据是升序排列,所以原创 2021-07-05 16:14:19 · 155 阅读 · 0 评论 -
合并二叉树
合并二叉树题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入:输出:合并后的树:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode原创 2021-06-30 18:01:06 · 115 阅读 · 0 评论 -
二叉树的直径
二叉树的直径题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。解题思路:根据示例可以看出,二叉树的直径 = 左子节点最大深度 + 右子节点最大深度,因此用dfs计算每一个节点的直径取最大值即可/** * Definition for a binary tree原创 2021-06-30 17:20:31 · 266 阅读 · 0 评论 -
路径总和 III
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。原创 2024-01-04 16:49:21 · 413 阅读 · 0 评论 -
不同的二叉搜索树
不同的二叉搜索树题目:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1解题思路:运用动态规划解决class Solution { public int numTrees(int n) { // dp[i]表示有 i 个节点时组成的二叉树个数 int dp[] = new int[n + 1];原创 2021-06-22 15:47:06 · 53 阅读 · 0 评论 -
不同的二叉搜索树 II
不同的二叉搜索树 II题目:示例 1:输入:n = 3输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]示例 2:输入:n = 1输出:[[1]]解题思路:用dfs进行解决,分别遍历以[1, n]为根节点时形成的二叉树,得到它的左子节点和右子节点的组成后,进行组合/** * Definition for a binary tree node. * public class TreeNod原创 2021-06-22 15:33:49 · 66 阅读 · 0 评论 -
把二叉搜索树转换为累加树
把二叉搜索树转换为累加树题目:给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。示例 1:输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]示例 2:输入:root = [0,null,原创 2021-06-11 20:39:56 · 61 阅读 · 0 评论 -
二叉树中的最大路径和
二叉树中的最大路径和题目:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,nul原创 2021-06-07 20:32:28 · 130 阅读 · 0 评论 -
二叉树的锯齿形层序遍历
二叉树的锯齿形层序遍历题目:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]解题思路:根据题意可以看出这是特殊的BFS,使用双端队列对每一层进行入队操作,再根据当前层的遍历顺序选择出队入队的顺序即可/** * Definition for原创 2020-12-22 10:20:16 · 720 阅读 · 1 评论 -
完全二叉树的节点个数
完全二叉树的节点个数题目:给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入:输出: 6解题思路:递归求节点个数/** * Definition for a binary tree node. * public class TreeNode { * int val; *原创 2020-11-03 14:02:26 · 362 阅读 · 0 评论 -
二叉树的最近公共祖先
二叉树的最近公共祖先题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/15/原创 2020-11-03 11:36:35 · 109 阅读 · 0 评论 -
二叉树的序列化与反序列化
二叉树的序列化与反序列化题目:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树:序列化为 “[1,2,3,null,null,4,5]”解题思路:用先序遍历将二叉树结构原创 2020-11-03 10:47:58 · 85 阅读 · 0 评论 -
寻找重复的子树
寻找重复的子树题目:给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1:下面是两个重复的子树:和解题思路:需要比较子树结构,那么就要想一个办法让子树结构具象化,所以想到了序列化二叉树,将树的结构变成了字符串,再用HashMap存储字符串出现的次数即子树结构出现的次数/** * Definition for a binary tree node. * public class Tr原创 2020-11-03 10:14:41 · 440 阅读 · 0 评论 -
从中序与后序遍历序列构造二叉树
从中序与后序遍历序列构造二叉树题目:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:解题思路:和从前序与中序遍历序列构造二叉树相似/** * Definition for a binary tree node. * public class TreeNode { * int val; * T原创 2020-11-02 15:50:21 · 127 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:解题思路:前序数组的第一个元素就是根节点,在中序数组中找到这一个元素,然后该元素左边就是左子树,右边是右子树,再分别对这两个部分进行构造/** * Definition for a binary tree node. * publ原创 2020-11-02 15:14:52 · 1069 阅读 · 0 评论 -
最大二叉树
最大二叉树题目:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点:解题思路:运用递归解决,首先需要思考的是根节点该如何构造,我们可以在指定区间内找到最大值,然后再将最大值左右区间分别进行查找最大值,依次递归。p原创 2020-11-02 14:27:34 · 834 阅读 · 0 评论 -
填充每个节点的下一个右侧节点指针
填充每个节点的下一个右侧节点指针题目:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。输入:{“KaTeX parse error: Expected '}'原创 2020-11-02 11:44:21 · 60 阅读 · 0 评论 -
二叉树展开为链表
二叉树展开为链表题目:给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树将其展开为:解题思路:运用前序遍历将节点添加进list中,然后遍历list改变每一个节点的左右节点/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * T原创 2020-11-02 10:42:20 · 96 阅读 · 0 评论 -
翻转二叉树
翻转二叉树题目:翻转一棵二叉树。示例:输入:输出:解题思路:运用递归从上至下进行翻转/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public Tr原创 2020-11-02 10:22:34 · 83 阅读 · 0 评论 -
验证二叉搜索树
验证二叉搜索树题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。解题思路:有两种思路,第一种是原创 2020-10-30 15:20:02 · 73 阅读 · 0 评论 -
求根到叶子节点数字之和
求根到叶子节点数字之和题目:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13 = 25.示例 2:原创 2020-10-29 09:32:59 · 229 阅读 · 0 评论