随笔分类 - leetcode-深度优先搜索
摘要:链接 https://leetcode.cn/problems/generate-parentheses/description/ 分析 这个题目是让生成有效的括号组合,首先我们搞明白一个问题,什么叫有效的括号? 1. 所有的括号都能找到有效的闭合。 基于此,我们可以认为:左括号数等于右括号数,且从
阅读全文
摘要:链接 https://leetcode.cn/problems/number-of-islands/description/ 思路 跟岛屿周长差不多...但我觉得这个比岛屿周长还简单。不知道为什么这个算中等题目,岛屿周长算简单题目 代码 class Solution: def numIslands(
阅读全文
摘要:链接 https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/ 思路 时刻记住,DFS是递归的一种。而解决递归,最朴素的思路就是:递归的定义就是递归的解。 题目要求我们求根节点到叶子结点的和,我们要提供一个值保持其状态,退出
阅读全文
摘要:问题描述 给你一个数组,生成这个数组中元素的全排列。 思路 经典的循环dfs。要点是我们需要设置visited数组来指代其是否被遍历过。 代码 class Solution: def islandPerimeter(self, grid): if not grid: return [] visite
阅读全文
摘要:链接 https://leetcode.cn/problems/island-perimeter/description/ 思路 这题理论上来讲可以用深搜广搜来做,但我第一时间没搞明白怎么做,所以就先迭代一发。 思路就是: 1. 题目给定的只有1个岛屿,那么我们可以遍历整个grid,对于发现的新岛屿
阅读全文
摘要:https://leetcode.cn/problems/sum-of-left-leaves/description/ 【分析】 该题要求左叶子之和。 如果我们对当前节点进行叶子节点的判断,那么我们是不知道当前节点是左叶子还是右叶子的。 所以我们应该在叶子结点的上层(父节点)进行判断。 【代码】
阅读全文
摘要:https://leetcode.cn/problems/binary-watch/description/ 分析 这是典型的循环DFS问题。 循环DFS一般应用在: 1. 输出字符的按位全排列。(比如一共4个数字,输出3个数字的全部组合) 2. 输出字符的全排列。(结合visited数组) 3.
阅读全文
摘要:问题描述 https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/ 解题思路 这个题目,用一个数组就能很好的解决。但空间复杂度是O(n). 题目中给的进阶要求,是要空间复杂度为O(1),所以这就要求我们在
阅读全文
摘要:问题描述 https://leetcode.cn/problems/path-sum-ii/description/ 解题思路 首先,我们设置一个容器存储最终的结果。 其次,我们在遍历过程中,更新数组。 然后,在叶子结点处判断是否加入。 代码 # Definition for a binary tr
阅读全文
摘要:问题描述 https://leetcode.cn/problems/recover-binary-search-tree/description/ 解题思路 二叉搜索树的中序遍历一定是一个有序的序列。 题目中说两个节点的值被交换了,即我们中序遍历得到的二叉搜索树是无序的,但交换两个节点即为有序。 所
阅读全文
摘要:问题描述 https://leetcode.cn/problems/validate-binary-search-tree/description/ 解题思路 二叉搜索树的性质是:root节点要大于左子树的最大值,小于右子树的最小值。 同时,对上层,也要更新本层的最大值和最小值以供继续递归。 补充:
阅读全文
摘要:问题描述 https://leetcode.cn/problems/binary-tree-paths/description/ 解题思路 叶子结点时,添加到结果序列即可。 代码 # Definition for a binary tree node. # class TreeNode: # def
阅读全文
摘要:问题描述 https://leetcode.cn/problems/invert-binary-tree/description/ 解题思路 没啥好说的,python的交换简单极了。 代码 # Definition for a binary tree node. # class TreeNode:
阅读全文
摘要:问题描述 https://leetcode.cn/problems/binary-tree-postorder-traversal/description/ 解题思路 这个题和先序一样,没啥好说的。 代码 # Definition for a binary tree node. # class Tr
阅读全文
摘要:问题描述 https://leetcode.cn/problems/binary-tree-preorder-traversal/description/ 解题思路 二叉树的先序遍历,没啥好说的。中-左-右。 先序中序后序 说的是中在哪里。 代码 # Definition for a binary
阅读全文
摘要:问题描述 https://leetcode.cn/problems/path-sum/description/ 解题思路 我们可以对叶子结点进行判断,如果叶子结点的值等于targetSum,那么就算是找到了。 代码 # Definition for a binary tree node. # cla
阅读全文
摘要:问题描述 https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 解题思路 这个题目不难,但对退出条件要求高。 经过对题意的分析,我们对于root为None的情况,以及root为叶子结点的情况,以及root只有左子
阅读全文
摘要:问题描述 https://leetcode.cn/problems/balanced-binary-tree/description/ 解题思路 这题一开始朴素的思路就是,对于每个节点,都计算其是不是平衡二叉树。 计算平衡二叉树的方式是对其求高度。 这会导致我们搜索了2次。 然而我们可以在一次搜索中
阅读全文
摘要:问题描述 https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 解题思路 二叉树的最大深度,等于左子树的深度和右子树深度的较大值加1(即本层深度). 代码 # Definition for a binary tr
阅读全文
摘要:问题描述 https://leetcode.cn/problems/symmetric-tree/description/ 解题思路 这个题,一看就是递归。既然如此,我们按照递归的一般思路来看,即问题的定义即为问题的解。 这个题目看似复杂,实际就是在求左子树的左孩子等于右子树的右孩子,左子树的右孩子
阅读全文