
DFS
文章平均质量分 56
KroneX
ACM退役选手,热爱优雅、高效、有创造力的技术,本博客记录题解,编程tips,计算机相关知识,心得等。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【leetcode】236. 二叉树的最近公共祖先(lowest-common-ancestor-of-a-binary-tree)(dfs)[中等]
链接https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/耗时解题:28 min题解:6 min题意给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”提示: 树中节点数目在范围 [2, 105] 内。 -原创 2021-07-08 09:55:23 · 169 阅读 · 0 评论 -
【leetcode】872. 叶子相似的树(leaf-similar-trees)(dfs)[简单]
链接https://leetcode-cn.com/problems/leaf-similar-trees/耗时解题:57 min题解:3 min题意请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false原创 2021-05-10 15:59:07 · 203 阅读 · 0 评论 -
【leetcode】938. 二叉搜索树的范围和(range-sum-of-bst)(dfs)[简单]
链接https://leetcode-cn.com/problems/range-sum-of-bst/耗时解题:21 min题解:8 min题意给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。提示:树中节点数目在范围 [1, 2 * 10^4] 内1 <= Node.val <= 10^51 <= low <= high <= 10^5所有 Node.val 互不相同思路因为是 BST,所以 df原创 2021-04-27 15:02:14 · 170 阅读 · 0 评论 -
【leetcode】897. 递增顺序搜索树(increasing-order-search-tree)(dfs)[简单]
链接https://leetcode-cn.com/problems/increasing-order-search-tree/耗时解题:31 min题解:17 min题意给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。提示:树中节点数的取值范围是 [1, 100]0 <= Node.val <= 1000思路维护一个 上一节点 的指针,这一指针指向当前节点在 答案树原创 2021-04-25 09:39:04 · 194 阅读 · 0 评论 -
【leetcode】778. 水位上升的泳池中游泳(swim-in-rising-water)(二分+DFS)[困难]
链接https://leetcode-cn.com/problems/swim-in-rising-water/耗时解题:12 min题解:9 min题意在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的原创 2021-01-30 11:52:31 · 194 阅读 · 0 评论 -
【leetcode】1631. 最小体力消耗路径(path-with-minimum-effort)(二分+DFS)[中等]
链接https://leetcode-cn.com/problems/path-with-minimum-effort/耗时解题:2 h 55 min题解:38 min题意你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往原创 2021-01-29 23:33:30 · 264 阅读 · 0 评论 -
【leetcode】129. 求根到叶子节点数字之和(sum-root-to-leaf-numbers)(DFS)[中等]
链接https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/耗时解题:12 min题解:4 min题意给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。思路详见代码。时间复杂度:O(n)O(n)O(n)AC代码/** * Def原创 2020-10-29 09:20:31 · 184 阅读 · 0 评论 -
【leetcode】543. 二叉树的直径(diameter-of-binary-tree)(dfs)[简单]
链接https://leetcode-cn.com/problems/diameter-of-binary-tree/耗时解题:12 min题解:18 min题意给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。思路这是一个经典问题,可以两次 bfs 解决,但这题是二叉树,我突然有了一个非常简单的写法,虽然复杂度很高。我发现:二叉树过根节点的直径是 根节点的 左子树的高度+右子树的高度。所以,计算所有节点左右原创 2020-10-06 16:48:05 · 233 阅读 · 0 评论 -
【leetcode】701. 二叉搜索树中的插入操作(insert-into-a-binary-search-tree)(dfs)[中等]
链接https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/耗时解题:21 min题解:6 min题意给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。思路利用二叉搜索树(BST)性质,从根节点开始,将当前节原创 2020-09-30 10:39:48 · 263 阅读 · 0 评论 -
【leetcode】113. 路径总和 II(path-sum-ii)(dfs)[中等]
链接https://leetcode-cn.com/problems/path-sum-ii/耗时解题:31 min题解:10 min题意给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。思路每次 + 的总和 = sum,相当于每次 - 最后的剩余 rest = 0。临界条件自然就是 叶节点,如果当前节点是叶节点,判断 rest - 当前节点值是否等于 0。如果等于 0 说明找到了,加入结果,不等于说明不行。如果不是叶节点就 dfs 左右节点,剩余 re原创 2020-09-26 10:22:53 · 131 阅读 · 0 评论 -
【leetcode】617. 合并二叉树(merge-two-binary-trees)(dfs)[简单]
链接https://leetcode-cn.com/problems/merge-two-binary-trees/耗时解题:25 min题解:5 min题意给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则 不为 NULL 的节点 将直接作为新二叉树的节点。思路按规则合并当前的两个节点,再依相同规则合并节点的左右子树。唯一需要注意的是当前节点为空原创 2020-09-23 08:47:25 · 164 阅读 · 0 评论 -
【leetcode】404. 左叶子之和(sum-of-left-leaves)(dfs)[简单]
链接https://leetcode-cn.com/problems/sum-of-left-leaves/耗时解题:20 min题解:6 min题意计算给定二叉树的所有左叶子之和。思路dfs 到的每个节点,都检查当前节点的左子树是不是叶节点,如果是返回左节点的值,如果不是继续遍历左子树。无论是不是都遍历右子树。最后返回 左右子树结果的加和。时间复杂度:O(n)O(n)O(n)AC代码/** * Definition for a binary tree node. * struct原创 2020-09-19 10:29:55 · 139 阅读 · 0 评论 -
【leetcode】685. 冗余连接 II(redundant-connection-ii)(dfs)[困难]
链接https://leetcode-cn.com/problems/redundant-connection-ii/耗时解题:1 h 51 min题解:-48+3 min题意在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图原创 2020-09-17 14:07:42 · 192 阅读 · 0 评论 -
【leetcode】226. 翻转二叉树(invert-binary-tree)(dfs)[简单]
链接https://leetcode-cn.com/problems/invert-binary-tree/耗时解题:5 min题解:11 min题意翻转一棵二叉树。 4 / \ 2 7 / \ / \1 3 6 9-> 4 / \ 7 2 / \ / \9 6 3 1思路交换 dfs 到的每一个节点的左右子树。时间复杂度:O(n)O(n)O(n) 树的节点数AC代码/** *原创 2020-09-16 13:11:53 · 194 阅读 · 0 评论 -
【leetcode】94. 二叉树的中序遍历(binary-tree-inorder-traversal)(dfs)[中等]
链接https://leetcode-cn.com/problems/binary-tree-inorder-traversal/耗时解题:18 min题解:1 min题意给定一个二叉树,返回它的中序 遍历。思路详见代码。时间复杂度:O(n)O(n)O(n)AC代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tre原创 2020-09-14 20:44:15 · 253 阅读 · 1 评论 -
【leetcode】109. 有序链表转换二叉搜索树(convert-sorted-list-to-binary-search-tree)(DFS)[中等]
链接https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/耗时解题:44 min题解:15 min题意给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。思路算是 【leetcode】108. 将有序数组转换为二叉搜索树(convert-sorted-array-to-binary-se原创 2020-08-18 18:34:02 · 174 阅读 · 0 评论 -
【leetcode】110. 平衡二叉树(balanced-binary-tree)(DFS)[简单]
链接https://leetcode-cn.com/problems/balanced-binary-tree/耗时解题:28 min题解:7 min题意给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。思路dfs() 返回树的高度,在回溯时判断每个节点左右子树的高度差是否大于 1,如果存在一个节点的左右差值的绝对值大于 1,则说明这不是一颗平衡树,ans = false。而如果所有的节点的左右差值原创 2020-08-17 11:35:43 · 191 阅读 · 0 评论 -
【leetcode】100. 相同的树(same-tree)(DFS)[简单]
链接https://leetcode-cn.com/problems/same-tree/耗时解题:8 min题解:5 min题意给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。思路深搜每一个节点看是否相同。分两种情况,如果当前两个节点有一个是空的,那么判断是否都是空节点,如果是,那么必然是 true,否则必然是 false;而如果两个节点都不为空,则比较节点值是否相同,如果不相同则为 false,如果相同,则继续深搜判断他原创 2020-08-07 10:14:47 · 181 阅读 · 0 评论 -
【leetcode】104. 二叉树的最大深度(maximum-depth-of-binary-tree)(DFS)[简单]
链接https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/耗时解题:7 min题解:3 min题意给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。思路深搜到底,返回 左右子树深度最大值+1 即可。时间复杂度:O(V)O(V)O(V) V 为树的节点数。AC代码/** * Definition for a binary tree nod原创 2020-07-28 11:54:44 · 167 阅读 · 0 评论 -
【leetcode】329. 矩阵中的最长递增路径(longest-increasing-path-in-a-matrix)(DFS)[困难]
链接https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/耗时解题:2 h题解:7 min题意给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。思路暴力深搜+记忆化。从矩阵的每个位置开始 按递增 深搜四个方向,并每次更新递增路径的长度。如果之前到达过当前位置,将记忆的长度与当前长度比较,如果记忆的长度大于原创 2020-07-26 11:12:32 · 188 阅读 · 0 评论 -
【leetcode】112. 路径总和(path-sum)(DFS)[简单]
链接https://leetcode-cn.com/problems/path-sum/耗时解题:29 min题解:6 min题意给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。思路暴力深搜。对于与每个子树来说,目标和为:根树的目标和 减 根节点的值。在搜到叶节点的时候判断一下当前叶节点值是否等于当前目标和,等于即找到路径。AC代码/** * Definition for a binary tree node. * stru原创 2020-07-07 08:54:56 · 176 阅读 · 0 评论 -
【leetcode】572. 另一个树的子树(subtree-of-another-tree)(DFS)[简单]
链接https://leetcode-cn.com/problems/subtree-of-another-tree/耗时解题:33 min题解:17 min题意给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。思路遍历 s 的每一个节点,检查当前节点及其子...原创 2020-05-07 16:25:45 · 230 阅读 · 0 评论 -
【leetcode】114. 二叉树展开为链表(Flatten Binary Tree to Linked List)(DFS)[中等]
链接https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/题意给定一个二叉树,原地将它展开为链表(将二叉树以先序遍历的顺序把每个节点依次存储在右子树)。思路如果当前节点的左子树不为空,则把 当前节点的右子树 放在 左子树的最右子节点的右子树 上,然后把当前节点的左子树放到右子树上,并把左子树置空。...原创 2019-10-16 11:04:43 · 194 阅读 · 0 评论