![](https://img-blog.csdnimg.cn/20201127231302634.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
树、二叉树、二叉搜索树
二叉树
Bonbon_wen
To be or not to be!
展开
-
Leetcode刷题173. 二叉搜索树迭代器
next() 和 hasNext() 操作均摊时间复杂度为 O(1) ,并使用 O(h) 内存。你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。时间复杂度,初始化和调用hasNext都只需要O(1)的时间,next方法最坏情况下需要O(N)的时间。时间复杂度O(N),对于next和hasNext方法都是O(1)。原创 2022-11-16 23:37:22 · 103 阅读 · 0 评论 -
Leetcode刷题331. 验证二叉树的前序序列化
链接:https://leetcode.cn/problems/verify-preorder-serialization-of-a-binary-tree。例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。输入: preorder = "9,3,4,#,#,1,#,#,2,#,6,#,#"例如它永远不会包含两个连续的逗号,比如 "1,,3"。输入: preorder = "9,#,#,1"输入: preorder = "1,#"原创 2022-11-15 01:46:48 · 135 阅读 · 0 评论 -
Leetcode刷题257. 二叉树的所有路径
链接:https://leetcode.cn/problems/binary-tree-paths。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]树中节点的数目在范围 [1, 100] 内。叶子节点 是指没有子节点的节点。来源:力扣(LeetCode)输入:root = [1]原创 2022-11-13 23:37:59 · 145 阅读 · 0 评论 -
Leetcode刷题199. 二叉树的右视图
链接:https://leetcode.cn/problems/binary-tree-right-side-view。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入: [1,2,3,4,null,null,null,7]输入: [1,2,3,null,5,null,4]输入: [1,null,3]输出: [1,3,4,7]输出: [1,3,4]原创 2022-11-13 21:55:15 · 131 阅读 · 0 评论 -
Leetcode刷题129. 求根节点到叶节点数字之和
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123。从根到叶子节点路径 4->9->5 代表数字 495。从根到叶子节点路径 4->9->1 代表数字 491。计算从根节点到叶节点生成的 所有数字之和。从根到叶子节点路径 1->2 代表数字 12。从根到叶子节点路径 1->3 代表数字 13。从根到叶子节点路径 4->0 代表数字 40。输入:root = [4,9,0,5,1]原创 2022-11-13 20:19:29 · 172 阅读 · 0 评论 -
Leetcode刷题449. 序列化和反序列化二叉搜索树
您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。链接:https://leetcode.cn/problems/serialize-and-deserialize-bst。方法二:利用栈遍历,时间和空间复杂度O(N)方法一:递归,时间和空间复杂度O(N)输入:root = [2,1,3]输出:[2,1,3]原创 2022-11-13 01:37:57 · 324 阅读 · 0 评论 -
Leetcode刷题437. 路径总和 III
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。著作权归领扣网络所有。原创 2022-11-13 00:14:14 · 187 阅读 · 0 评论 -
Leetcode刷题113. 路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。著作权归领扣网络所有。输入:root = [1,2,3], targetSum = 5。输入:root = [1,2], targetSum = 0。输出:[[5,4,11,2],[5,8,4,5]]叶子节点 是指没有子节点的节点。原创 2022-11-12 22:27:27 · 166 阅读 · 0 评论 -
Leetcode刷题112. 路径总和
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22。输入:root = [1,2,3], targetSum = 5。解释:由于树是空的,所以不存在根节点到叶子节点的路径。不存在 sum = 5 的根节点到叶子节点的路径。解释:等于目标和的根节点到叶节点路径如上图所示。叶子节点 是指没有子节点的节点。原创 2022-11-12 18:45:00 · 583 阅读 · 0 评论 -
Leetcode刷题110. 平衡二叉树
链接:https://leetcode.cn/problems/balanced-binary-tree。输入:root = [1,2,2,3,3,null,null,4,4]著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。给定一个二叉树,判断它是否是高度平衡的二叉树。来源:力扣(LeetCode)输入:root = []原创 2022-11-10 00:42:04 · 124 阅读 · 0 评论 -
Leetcode刷题109. 有序链表转换二叉搜索树
链接:https://leetcode.cn/problems/convert-sorted-list-to-binary-search-tree。解释: 一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。商业转载请联系官方授权,非商业转载请注明出处。输入: head = [-10,-3,0,5,9]输出: [0,-3,9,-10,null,5]输入: head = []原创 2022-11-10 00:10:27 · 274 阅读 · 0 评论 -
Leetcode刷题124. 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。链接:https://leetcode.cn/problems/binary-tree-maximum-path-sum。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]输入:root = [1,2,3]来源:力扣(LeetCode)原创 2022-11-05 22:40:26 · 183 阅读 · 0 评论 -
Leetcode刷题108. 将有序数组转换为二叉搜索树
链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree。给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]输入:nums = [1,3]原创 2022-11-03 00:32:33 · 128 阅读 · 0 评论 -
Leetcode刷题235. 二叉搜索树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8。输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]原创 2022-10-30 23:33:21 · 164 阅读 · 0 评论 -
Leetcode刷题236. 二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。因为根据定义最近公共祖先节点可以为节点本身。输入:root = [1,2], p = 1, q = 2。原创 2022-10-30 22:47:25 · 240 阅读 · 0 评论 -
Leetcode刷题341. 扁平化嵌套列表迭代器
请你实现一个迭代器将其扁平化,使之能够遍历这个列表中的所有整数。解释:通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。解释:通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。否则,返回 false。输入:nestedList = [[1,1],2,[1,1]]输入:nestedList = [1,[4,[6]]]输出:[1,1,2,1,1]输出:[1,4,6]原创 2022-10-30 21:48:54 · 172 阅读 · 0 评论 -
Leetcode刷题1373. 二叉搜索子树的最大键值和
输入:root = [1,4,3,2,4,2,5,null,null,null,null,null,null,4,6]输入:root = [5,4,8,3,null,6,3]解释:键值为 2 的单节点子树是和最大的二叉搜索树。解释:所有节点键值都为负数,和最大的二叉搜索树为空。任意节点的左子树中的键值都 小于 此节点的键值。任意节点的右子树中的键值都 大于 此节点的键值。输入:root = [4,3,null,1,2]解释:键值为 3 的子树是和最大的二叉搜索树。输入:root = [-4,-2,-5]原创 2022-10-29 20:35:44 · 511 阅读 · 0 评论 -
Leetcode刷题95. 不同的二叉搜索树 II
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树。可以按 任意顺序 返回答案。链接:https://leetcode.cn/problems/unique-binary-search-trees-ii。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。大佬的详细解法,传送门。原创 2022-10-23 23:59:34 · 230 阅读 · 0 评论 -
Leetcode刷题96. 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。链接:https://leetcode.cn/problems/unique-binary-search-trees。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。来源:力扣(LeetCode)原创 2022-10-22 22:38:07 · 117 阅读 · 0 评论 -
Leetcode刷题450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。输入: root = [5,3,6,2,4,null,7], key = 0。输入:root = [5,3,6,2,4,null,7], key = 3。另一个正确答案是 [5,2,6,null,4,null,7]。输出:[5,4,6,2,null,null,7]输出: [5,3,6,2,4,null,7]原创 2022-10-22 15:14:10 · 116 阅读 · 0 评论 -
Leetcode刷题701. 二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5。输入:root = [40,20,60,10,30,50,70], val = 25。输出:[40,20,60,10,30,50,70,null,null,25]输入:root = [4,2,7,1,3], val = 5。输出:[4,2,7,1,3,5]输出:[4,2,7,1,3,5]原创 2022-10-20 23:41:04 · 103 阅读 · 0 评论 -
Leetcode刷题700. 二叉搜索树中的搜索
链接:https://leetcode.cn/problems/search-in-a-binary-search-tree。你需要在 BST 中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null。商业转载请联系官方授权,非商业转载请注明出处。给定二叉搜索树(BST)的根节点 root 和一个整数值 val。输入:root = [4,2,7,1,3], val = 2。输入:root = [4,2,7,1,3], val = 5。输出:[2,1,3]原创 2022-10-20 23:09:20 · 162 阅读 · 0 评论 -
Leetcode刷题538. 把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]节点的右子树仅包含键 大于 节点键的节点。输入:root = [3,2,4,1]输出:[3,3,2]原创 2022-10-19 23:13:06 · 97 阅读 · 0 评论 -
Leetcode刷题230. 二叉搜索树中第K小的元素
请你设计一个算法查找其中第。个最小元素(从 1 开始计数)。给定一个二叉搜索树的根节点。原创 2022-10-17 23:47:34 · 149 阅读 · 0 评论 -
Leetcode刷题652. 寻找重复的子树
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。对于同一类的重复子树,你只需要返回其中任意。来源:力扣(LeetCode)给你一棵二叉树的根节点。原创 2022-10-15 23:57:32 · 271 阅读 · 0 评论 -
Leetcode刷题297. 二叉树的序列化与反序列化
这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。输入:root = [1,2,3,null,null,4,5]输出:[1,2,3,null,null,4,5]输入:root = [1,2]输入:root = [1]输入:root = []原创 2022-10-03 17:15:30 · 700 阅读 · 0 评论 -
Leetcode刷题889. 根据前序和后序遍历构造二叉树
给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。输入:preorder = [1,2,4,5,3,6,7], postorder = [4,5,2,6,7,3,1]输入: preorder = [1], postorder = [1]商业转载请联系官方授权,非商业转载请注明出处。如果存在多个答案,您可以返回其中 任何 一个。输出:[1,2,3,4,5,6,7]原创 2022-10-03 11:35:30 · 231 阅读 · 0 评论 -
Leetcode刷题654. 最大二叉树
给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:- [3,2,1,6,0,5] 中的原创 2021-01-25 00:40:41 · 411 阅读 · 0 评论 -
Leetcode刷题543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。原创 2022-09-12 21:06:36 · 129 阅读 · 0 评论 -
Leetcode刷题222. 完全二叉树的节点个数
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。链接:https://leetcode.cn/problems/count-complete-tree-nodes。给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。输入:root = [1,2,3,4,5,6]来源:力扣(LeetCode)输入:root = [1]输入:root = []原创 2022-10-30 00:50:23 · 83 阅读 · 0 评论 -
Leetcode刷题111. 二叉树的最小深度
链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree。输入:root = [2,null,3,null,4,null,5,null,6]著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]最小深度是从根节点到最近叶子节点的最短路径上的节点数量。树中节点数的范围在 [0, 105] 内。说明:叶子节点是指没有子节点的节点。给定一个二叉树,找出其最小深度。原创 2022-10-29 23:50:49 · 298 阅读 · 0 评论 -
Leetcode刷题117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。示例:输入:root = [1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]解释:给定二叉树如图 A 所示,你的函数应该...原创 2021-01-24 22:45:51 · 182 阅读 · 0 评论 -
Leetcode刷题116. 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的...原创 2021-01-24 01:08:16 · 169 阅读 · 0 评论 -
Leetcode刷题114. 二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5/ \ \3 4 6将其展开为:1\ 2 \ 3 \ 4 \ 5 \ 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list著作权归领扣...原创 2021-01-23 17:25:41 · 160 阅读 · 1 评论 -
Leetcode刷题226. 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。来源:力扣(LeetCode)链接:https://leetco...原创 2021-01-23 16:36:15 · 169 阅读 · 0 评论 -
Leetcode刷题590. N叉树的后序遍历
给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个3叉树:返回其后序遍历: [5,6,3,2,4,1].来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public List<Integer> postorder(Node ...原创 2021-01-22 21:57:44 · 173 阅读 · 1 评论 -
Leetcode刷题589. N叉树的前序遍历
给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个3叉树:返回其前序遍历:[1,3,5,6,2,4]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public List<Integer> preorder(Node ro...原创 2021-01-21 23:08:19 · 157 阅读 · 0 评论 -
Leetcode刷题107. 二叉树的层序遍历 II
链接:https://leetcode.cn/problems/binary-tree-level-order-traversal-ii。给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]输入:root = [1]输入:root = []原创 2022-11-09 01:21:56 · 126 阅读 · 0 评论 -
Leetcode刷题106. 从中序与后序遍历序列构造二叉树
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输入:inorder = [-1], postorder = [-1]著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输出:[3,9,20,null,null,15,7]来源:力扣(LeetCode)原创 2022-10-03 10:07:15 · 147 阅读 · 0 评论 -
Leetcode刷题105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]原创 2022-10-02 22:17:24 · 516 阅读 · 0 评论