随笔分类 - 算法
摘要:所有子集 题目:所有子集 返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 : 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 题解 子集的个数:2n, 每个节点选(0
阅读全文
摘要:统计唯一值子树个数 题目:统计唯一值子树个数 给定一棵二叉树,统计唯一值子树的数目.唯一值子树意味着子树的所有节点都具有相同的值. 示例: 输入: root = {5,1,5,5,5,#,5} 输出: 4 解释: 5 / \ 1 5 / \ \ 5 5 5 题解 1. BFS+DFS BFS遍历每个
阅读全文
摘要:验证二叉搜索树中的前序序列 题目:验证二叉搜索树中的前序序列 给定一组数字,验证它是否是二叉搜索树的正确的前序遍历序列。 示例1: 输入: preorder = [1,3,2] 输出: true 示例2: 输入:preorder=[4,2,1,3,6,5,7] 输出:true 题解 方法1:分治法
阅读全文
摘要:删除二叉搜索树中的节点 题目:删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 示例 1: 输入:root = [5,3,6,2,4,null,7], k
阅读全文
摘要:分治法在二叉树的应用 二叉树 每个节点最多有两个子树的树结构。 二叉树的高度: O(logN)~O(N)之间 二叉树的时间复杂度: 时间复杂度:O(一次的复杂度)*次数 空间复杂度:O(一次的复杂度+深度) 分治法 将问题分解为子问题求解,自己将子问题的结果进行合并,求出最终解。 二叉树中分治法的应
阅读全文
摘要:二叉搜索树中最接近的值 II 题目:二叉搜索树中最接近的值 II 给定一棵非空二叉搜索树以及一个target值,找到 BST 中最接近给定值的 k 个数。 示例: 输入: {3,1,4,#,2} 0.275000 2 输出: [1,2] 解释: 二叉树 {3,1,4,#,2},表示如下的树结构: 3
阅读全文
摘要:二叉搜索树中最接近的值 题目:二叉搜索树中最接近的值 给一棵非空二叉搜索树以及一个target值,找到在BST中最接近给定值的节点值 示例: 输入: root = {5,4,9,2,#,8,10} and target = 6.124780 输出: 5 解释: 二叉树 {5,4,9,2,#,8,10
阅读全文
摘要:二叉搜索树的第k大节点 题目:二叉搜索树的第k大节点 给定一棵二叉搜索树,请找出其中第 k 大的节点的值。 示例: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 题解 方法1:分治法 class Solution { int step, r
阅读全文
摘要:最近公共祖先 III 题目:最近公共祖先 III 给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。返回 null 如果两个节点在这棵树上不存在最近公共祖先的话。 注意: 这两个节点未必都在这棵树上出现。 每个节点的值都不同 示例: 输入: {4, 3, 7, #, #, 5,
阅读全文
摘要:二叉搜索树的最近公共祖先I 题目:二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 示例: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是
阅读全文
摘要:最小子树 题目:最小子树 给一棵二叉树, 找到和为最小的子树, 返回其根节点。 示例: 输入: {1,-5,2,1,2,-4,-5} 输出:1 说明 这棵树如下所示: 1 / \ -5 2 / \ / \ 1 2 -4 -5 整颗树的和是最小的,所以返回根节点1. 题解:分治法 public cla
阅读全文
摘要:路径总和 II 题目:路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 示例 1: 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum
阅读全文
摘要:求根节点到叶节点数字之和 题目:求根节点到叶节点数字之和 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和
阅读全文
摘要:二叉树展开为链表 题目:二叉树展开为链表 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树先序遍历顺序相同。 示例 1: 输入:root
阅读全文
摘要:从中序与后序遍历序列构造二叉树 题目:从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树。 示例: 3 / \ 9 20 / \ 15 7 输入:中序遍历 inorder = [9,3,15,20,7],后序遍历 postorder = [9,15,7,20,3] 输出:[3,
阅读全文
摘要:从前序与中序遍历序列构造二叉树 题目:从前序与中序遍历序列构造二叉树 给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。 示例 1: Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] Out
阅读全文
摘要:课程表IV 题目:课程表 IV 你总共需要上 n 门课,课程编号依次为 0 到 n-1 。 prerequisites数对[1,0]表示1是0的先修课程。 对于每个查询对 queries[i] ,请判断 queries[i][0] 是否是 queries[i][1] 的先修课程。 请返回一个布尔值列
阅读全文
摘要:有向图中最大颜色值 题目:有向图中最大颜色值 给你一个 有向图 ,它含有 n 个节点和 m 条边。节点编号从 0 到 n - 1 。 给你一个字符串 colors ,其中 colors[i] 是小写英文字母,表示图中第 i 个节点的 颜色 (下标从 0 开始)。 给你一个二维数组 edges ,其中
阅读全文
摘要:找到最终的安全状态 题目:找到最终的安全状态 对于一个起始节点,如果从该节点出发,无论每一步选择沿哪条有向边行走,最后必然在有限步内到达终点,则将该起始节点称作是 安全的。 返回一个由图中所有安全节点,节点应当按 升序 排列。 示例 1: 输入:graph = [[1,2],[2,3],[5],[0
阅读全文
摘要:二叉树是否平衡 题目:平衡二叉树 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 示例 1: 输入:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 输出:true 题
阅读全文