无锡建设网站制作网址seo查询
10. 二叉树遍历(Binary Tree Traversal)
二叉树遍历是指按照某种顺序依次访问二叉树中的每个节点,使得每个节点仅被访问一次。
-
前序遍历:根 -> 左 -> 右
-
中序遍历:左 -> 根 -> 右
-
后序遍历:左 -> 右 -> 根
示例: 输入:root = [1, null, 2, 3]
输出:[1, 3, 2]
解释: 中序遍历按照左、根、右的顺序访问节点。 可使用递归或栈来按此顺序遍历树。
力扣相关题目:
257. 二叉树的所有路径
230. 二叉搜索树中第 K 小的元素
124. 二叉树中的最大路径和
11.深度优先搜索(DFS)
深度优先搜索遍历会沿着树的深度尽可能深地访问节点,直到无法继续,然后回溯。根据访问根节点的顺序不同,深度优先搜索遍历又可细分为前序遍历、中序遍历和后序遍历。
1. 前序遍历(Preorder Traversal)
遍历顺序:根节点 -> 左子树 -> 右子树。即先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。
2. 中序遍历(Inorder Traversal)
遍历顺序:左子树 -> 根节点 -> 右子树。即先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。
3. 后序遍历(Postorder Traversal)
遍历顺序:左子树 -> 右子树 -> 根节点。即先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。
力扣相关题目:
133. 克隆图
113. 路径总和 II
210. 课程表 II
12.广度优先搜索(BFS)
广度优先搜索遍历也称为层序遍历,它按照树的层次依次访问节点,从根节点开始,逐层向下访问,同一层的节点按照从左到右的顺序访问。
示例问题:
假设有一个二维迷宫,其中 0
表示通路,1
表示墙壁,起点为左上角 (0, 0)
,终点为右下角 (m - 1, n - 1)
(m
为迷宫的行数,n
为迷宫的列数)。我们需要使用广度优先搜索算法找出从起点到终点的最短路径长度。
import java.util.LinkedList;
import java.util.Queue;public class MazeBFS {// 定义四个方向:上、下、左、右private static final int[][] DIRECTIONS = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public static int shortestPath(int[][] maze) {int m = maze.length;int n = maze[0].length;// 若起点或终点为墙壁,无法到达,返回 -1if (maze[0][0] == 1 || maze[m - 1][n - 1] == 1) {return -1;}// 用于标记节点是否已访问boolean[][] visited = new boolean[m][n];// 创建队列用于 BFSQueue<int[]> queue = new LinkedList<>();// 将起点加入队列,并标记为已访问queue.offer(new int[]{0, 0, 0});visited[0][0] = true;while (!queue.isEmpty()) {int[] current = queue.poll();int x = current[0];int y = current[1];int steps = current[2];// 若到达终点,返回步数if (x == m - 1 && y == n - 1) {return steps;}// 尝试四个方向for (int[] dir : DIRECTIONS) {int newX = x + dir[0];int newY = y + dir[1];// 检查新位置是否合法且未访问过,并且是通路if (newX >= 0 && newX < m && newY >= 0 && newY < n &&!visited[newX][newY] && maze[newX][newY] == 0) {// 标记新位置为已访问visited[newX][newY] = true;// 将新位置加入队列,并更新步数queue.offer(new int[]{newX, newY, steps + 1});}}}// 若无法到达终点,返回 -1return -1;}public static void main(String[] args) {int[][] maze = {{0, 1, 0, 0},{0, 0, 0, 1},{0, 1, 0, 0},{0, 0, 1, 0}};int shortest = shortestPath(maze);System.out.println("从起点到终点的最短路径长度为: " + shortest);}
}
力扣相关题目:
102. 二叉树的层序遍历
994. 腐烂的橘子
127. 单词接龙