200. 岛屿数量
问题200 岛屿数量 ★★☆☆☆ https://leetcode-cn.com/problems/number-of-islands/ 从深度优先遍历的角度来考虑这个题目,思路就比较清晰了,以某一个节点为起始,按照一定顺序去深度优先遍历值为1的节点,并标注访问状态,直到没有能到达的值为1的节点结束,这样就等于把某一个连通的岛屿的所有节点全部访问到并标注了访问状态。上层做二维数组遍历,碰到...
问题200 岛屿数量 ★★☆☆☆ https://leetcode-cn.com/problems/number-of-islands/ 从深度优先遍历的角度来考虑这个题目,思路就比较清晰了,以某一个节点为起始,按照一定顺序去深度优先遍历值为1的节点,并标注访问状态,直到没有能到达的值为1的节点结束,这样就等于把某一个连通的岛屿的所有节点全部访问到并标注了访问状态。上层做二维数组遍历,碰到...
问题130 被围绕的区域 ★★☆☆☆ https://leetcode-cn.com/problems/surrounded-regions/ 这种二维数组按元素属性做连通的题目,可以说是比较典型的遍历类题目了。对于本题,从DFS的角度考虑,给定一个元素,如果元素值是X,跳过即可;如果元素值是O,那么开始遍历,目标是把和这个元素连通的所有元素都遍历到。比如,先往上,再往下,再往左,再往右,...
问题99 恢复二叉搜索树 https://leetcode-cn.com/problems/recover-binary-search-tree/ 根据题目要求,一颗二叉搜索树,有两个节点的位置被对调了,现在需要恢复到对调前的状态,使它变为有效的二叉搜索树。首先这里不需要纠结于操作树指针,只需要定位到两个被对调的节点,然后交换它们的值就可以了。那么如何定位到两个被对调的节点呢?还得从二叉搜...
问题98 验证二叉搜索树 https://leetcode-cn.com/problems/validate-binary-search-tree/ 如何判断一颗二叉树是不是BST呢?根据BST的定义,本质上就是判断这颗二叉树的中序遍历是不是递增的。如果是递增的,那说明这是一颗BST,如果不是递增的,则说明这不是一颗有效的BST。既然如此,那就中序遍历就可以了,笨一点的办法是将中序遍历的结...
问题96 不同的二叉搜索树 https://leetcode-cn.com/problems/unique-binary-search-trees/ 这个题目如果纠结于具体的二叉搜索树形态就想错方向了,关键点是将问题抽象,从整棵树的角度来考虑。我们定义包含从1到n这n个节点的可能的二叉搜索树的个数为S(n)。这些二叉搜索树可能以从1到n的任一个作为根节点,如果以1作为根节点,那么对应的可能...
题目95 不同的二叉搜索树 https://leetcode-cn.com/problems/unique-binary-search-trees-ii/ 这个题目相比问题96就要复杂一些,问题96中我们不关心二叉搜索树的具体形态,只关心可能的数量,而问题95这里就必须要处理二叉搜索树具体的形态了。 这个题目给人感觉很复杂的样子,对于这种没有太好入手点的题目,先考虑最简单的情况,由小到大...
问题617 合并二叉树 ★☆☆☆☆ https://leetcode-cn.com/problems/merge-two-binary-trees/ 这个题目从递归的角度出发并不难想到解题思路,merge两个二叉树可以处理为:merge它们的左子树,merge它们的右子树,merge根节点,并把merge左右子树的结果作为新的左右子树。 如果不使用递归呢?不使用递归的话,对两颗二叉树做层...
问题572 另一棵树的子树 ★★☆☆☆ https://leetcode-cn.com/problems/subtree-of-another-tree/ 额,这个题目是看了官方题解以后写的。官方题解的思路比较容易理解,简单来说就是做两层DFS,第一层DFS用来遍历可能的每棵子树来比较,第二层DFS用来判断两颗树是否相等。而我一开始的思路是怎样在DFS过程中既遍历可能的每棵子树,又比较两颗...
问题449 序列化和反序列化二叉搜索树 ★★☆☆☆ https://leetcode.cn/problems/serialize-and-deserialize-bst/ 题目要求很好理解了,简单来说,给定一颗二叉查找树,写两个方法,一个方法可以把二叉查找树序列化为字符串,另一个方法可以把序列化的字符串反序列化为同样结构的二叉查找树。 我是从反序列化方法入手的,先搞清楚如何从一个字符串能...
问题117 填充每个节点的下一个右侧节点指针 ★★☆☆☆ https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/ 这个题目和Problem116几乎就是一样的,按照层序遍历处理的话代码都是通用的,不赘述。 在 LeetCode 查看