![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】337. 打家劫舍 III---树上最大独立集
除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。原创 2023-09-18 18:15:43 · 323 阅读 · 0 评论 -
【Java|golang】1026. 节点与其祖先之间的最大差值---避坑,注意:golang中同一个包下的全局变量只加载一次。
给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)原创 2023-04-18 10:56:58 · 377 阅读 · 0 评论 -
【Java|golang】2185. 统计包含给定前缀的字符串---实现字典树
给你一个字符串数组 words 和一个字符串 pref 。原创 2023-01-09 22:42:19 · 87 阅读 · 0 评论 -
【java|golang】779. 第K个语法符号
我们构建了一个包含 n 行( 索引从 1 开始 )的表。首先在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。原创 2022-10-20 19:15:18 · 166 阅读 · 0 评论 -
【Java|golang】652. 寻找重复的子树---dfs遍历
给定一棵二叉树 root,返回所有重复的子树。原创 2022-09-05 11:05:30 · 207 阅读 · 0 评论 -
【Java|golang】687. 最长同值路径
给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。原创 2022-09-02 13:27:54 · 180 阅读 · 0 评论 -
【Java|golang】655. 输出二叉树----深度搜索以及确认深度
给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则:原创 2022-08-22 11:32:58 · 233 阅读 · 0 评论 -
【Java】1161. 最大层内元素和----层次遍历
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。原创 2022-08-03 13:39:00 · 74 阅读 · 0 评论 -
【Java|golang】814. 二叉树剪枝---递归遍历
给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1 。原创 2022-07-22 17:56:40 · 108 阅读 · 0 评论 -
【java|golang】648. 单词替换---字典树
在英语中,我们有一个叫做 词根(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。原创 2022-07-08 11:37:42 · 176 阅读 · 0 评论 -
【java|golang】508. 出现次数最多的子树元素和---golang使用全局变量避免踩坑
给你一个二叉树的根结点root,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。一个结点的「子树元素和」定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。...原创 2022-06-20 11:29:16 · 102 阅读 · 0 评论 -
【Java】108. 将有序数组转换为二叉搜索树---搜索二叉树中序遍历反操作,使用递归遍历快速解决问题,比较有特色!!!!
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。提示原创 2021-09-11 17:19:26 · 83 阅读 · 0 评论 -
【Java】104. 二叉树的最大深度---使用递归遍历,快速解决问题!!!
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。代码:public int maxDepth(TreeNode root) { if(root==null) { return 0; } int left=maxDepth(root.left)+1; int right=maxDepth(root.righ原创 2021-09-11 16:23:33 · 140 阅读 · 0 评论 -
【Java】101. 对称二叉树---使用中序遍历,时间复杂度O(N)!!!
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:进阶:你可以运用递归和迭代两种方法解决这个问题吗?代码:public boolean isSymmetric(TreeNode root) { if(root==null) { return true; } return dfs(root.left, root.right); } public原创 2021-09-04 19:58:38 · 187 阅读 · 0 评论 -
【Java】987. 二叉树的垂序遍历---注意同行同列出现多个节点,使用层次遍历(队列存储),Map<Integer,List<Integer>>存储数据,对集合进行排序(List)必不可少!!!
给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row + 1, col - 1) 和 (row + 1, col + 1) 。树的根结点位于 (0, 0) 。二叉树的 垂序遍历 从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。返回二叉树的 垂序遍历 序列。示例 1:输入:root = [原创 2021-07-31 11:05:27 · 194 阅读 · 0 评论 -
【Java】1104. 二叉树寻路---时间复杂度O(logN),使用对称策略,快速解决问题!!!
在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例 1:输入:label = 14输出:[1,3,4,14]示例 2:输入:label = 26输出:[1,2,6,原创 2021-07-29 10:42:05 · 204 阅读 · 0 评论 -
【Java】二叉搜索树(BST)理解二叉搜索树(BST)的定义,快速入门!!!
二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。代码:public TreeNode searchBST(TreeNode .原创 2021-07-28 10:20:17 · 150 阅读 · 0 评论 -
【Java】863. 二叉树中所有距离为 K 的结点---使用map记录父节点,使用dfs搜索遍历!!!
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2输出:[7,4,1]解释:所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1注意,输入的 “root” 和 “target” 实际上是树上的结点。上面的输入仅原创 2021-07-28 09:22:04 · 119 阅读 · 0 评论 -
【Java】671. 二叉树中第二小的节点---注意给出的条件,避免踩坑!!!
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入:root = [2,2,5,null,null,5,7]输出:5解释:最小的值是 2 ,第二小的值是 5 。示例原创 2021-07-27 09:39:40 · 144 阅读 · 0 评论 -
【Java】100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内-104 <= Node.val <原创 2021-07-05 10:52:51 · 84 阅读 · 0 评论 -
【Java】145. 二叉树的后序遍历---使用递归,快速解决问题!!!
给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]代码:public List<Integer> postorderTraversal(TreeNode root) { List<Integer> list=new ArrayList<Integer>(); preorderTraversal(root,list); return list; } pu原创 2021-06-30 09:25:47 · 54 阅读 · 0 评论 -
【Java】94. 二叉树的中序遍历---使用递归快速遍历!!!
给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:示例 3:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100代码:List<Integer> list=new ArrayList<Integer>(); public List<Integer&g原创 2021-06-28 13:54:37 · 83 阅读 · 0 评论 -
【java】993. 二叉树的堂兄弟节点---快速查询某个结点的父节点和该节点的深度!!!
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。示例 1:输入:root = [1,2,3,4], x = 4, y = 3输出:false示例 2:输入:root = [1,2,3,null,4,nu原创 2021-05-17 11:13:01 · 233 阅读 · 0 评论 -
【java】872. 叶子相似的树---使用递归遍历叶子结点,避免踩坑!!!
举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。示例 1:输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]输出:true示例 2:输原创 2021-05-10 10:40:12 · 146 阅读 · 0 评论 -
【java】938. 二叉搜索树的范围和---根据平衡二叉树解答问题!!!
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例 1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10输出:23提示:树中节点数目在范围 [1, 2 * 104] 内1 <= Node.val <= 1051 <= low &原创 2021-04-27 09:17:18 · 69 阅读 · 0 评论 -
【java】783. 二叉搜索树节点最小距离---了解二叉搜索树的中序遍历,避免踩坑!!!
提示:树中节点数目在范围 [2, 100] 内0 <= Node.val <= 105思路:二叉搜索树左节点全部小于根节点,右结点全部大于根节点,根据任意两结点的最小值,则要采用中序遍历(根左右)。代码: int min=100000; Integer integer=null; public int minDiffInBST(TreeNode root) { tree(root); return min; ..原创 2021-04-13 10:09:53 · 76 阅读 · 0 评论 -
【Java】173. 二叉搜索树迭代器---学习二叉树中序序列,避免踩坑!!!
实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int next()将指针向右移动,然后返回指针处的数字。原创 2021-03-29 19:18:26 · 184 阅读 · 0 评论 -
【java】331. 验证二叉树的前序序列化---快速理解思想,解决问题!!!
序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 _9_ / \ 3 2 / \ / \ 4 1 # 6/ \ / \ / \# # # # # #例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一原创 2021-03-12 10:49:24 · 81 阅读 · 0 评论 -
【java】103. 二叉树的锯齿形层序遍历----递归集合结合,快熟入手!!!
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]public static List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<In原创 2020-12-22 19:31:37 · 109 阅读 · 1 评论 -
[java]127. 单词接龙---学习简单树的深度查询问题
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWord = “hit”,endWord = “原创 2020-11-05 22:02:17 · 103 阅读 · 1 评论