深度优先搜索(DFS)
深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。
从根节点开始,尽可能深的搜索每一个分支,把一个分支的结果搜索完,再去看另一个分支。
形象来说:“一条路走到底,不撞南墙不回头”。
二叉搜索树的范围和
题目描述
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。
注意哦,根节点的值大于左子树,并且根节点的值小于右子树
detail
示例1:
1 | 输入:root = [10,5,15,3,7,null,18], low = 7, high = 15 |
示例2:
1 | 输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10 |
1 | static int rangeSumBST(TreeNode root, int low, int high) { |
递归
1 | static int rangeSumBST2(TreeNode root, int low, int high) { |
岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例1:
1 | 输入:grid = [ |
示例2:
1 | 输入:grid = [ |
为了求出岛屿的数量,我们可以扫描整个二维网格。如果一个位置为 1,则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中,每个搜索到的 1 都会被重新标记为 0,也就是说将1周围出现(上下左右)的1全部同化成0
1 | int numIslands(char** grid, int gridSize, int* gridColSize){ |
0-1 背包问题
有n件物品,每件物品的重量为w[i], 价值为c[i]。现在需要选出若干件物品放入一个容量为v的背包中,使得在选入背包的物品重量和不超过容量v的前提下,让背包中物品的价格之和最大,求最大价值。
1 | 输入:物品重量:3 5 1 2 2 物品价值:4 5 2 1 3 |
code
1 | public class Main { |