树的最大深度和最小深度(java)

树的深度和高度

什么是树的深度?什么是树的高度,一张图让你弄明白!我们暂时以二叉树为例。

在这里插入图片描述

二叉树的最大高度

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],
在这里插入图片描述
返回它的最大深度 3 。

思路分析

我们在做每一道关于二叉树的题时,都要考虑该用什么遍历方式来解题。

我们要计算一棵树的深度,那么我们就要到达这棵树的最低端,然后在往上数,二叉树的只有左节点和右节点,所以我们只要达到这两者的最低端,然后进行比较即可,所以我们在这里使用后序遍历(左右根)。

递归

如果到现在还不会写递归,请入土吧

class Solution {
   
    public int maxDepth(TreeNode root) {
   
        if(root == null) return 0;
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        int depth = 1 + Math.max(leftDepth
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用深度优先搜索(DFS)算法来进行深度遍历并找到最小路径。下面是一个使用Java实现DFS的示例代码,其中包括寻找最小路径的部分: ```java import java.util.ArrayList; import java.util.List; public class MinimumPathDFS { private int minPath; // 最小路径长度 private List<Integer> minPathNodes; // 最小路径节点列表 public List<Integer> findMinimumPath(int[][] graph, int start, int end) { minPath = Integer.MAX_VALUE; minPathNodes = new ArrayList<>(); List<Integer> path = new ArrayList<>(); boolean[] visited = new boolean[graph.length]; dfs(graph, start, end, 0, path, visited); return minPathNodes; } private void dfs(int[][] graph, int current, int end, int pathLen, List<Integer> path, boolean[] visited) { path.add(current); visited[current] = true; if (current == end) { if (pathLen < minPath) { minPath = pathLen; minPathNodes.clear(); minPathNodes.addAll(path); } } else { for (int i = 0; i < graph[current].length; i++) { if (graph[current][i] != 0 && !visited[i]) { dfs(graph, i, end, pathLen + graph[current][i], path, visited); } } } path.remove(path.size() - 1); visited[current] = false; } public static void main(String[] args) { int[][] graph = { {0, 2, 4, 0, 0}, {0, 0, 3, 2, 0}, {0, 0, 0, 0, 2}, {0, 0, 0, 0, 3}, {0, 0, 0, 0, 0} }; int start = 0; int end = 4; MinimumPathDFS solver = new MinimumPathDFS(); List<Integer> minPathNodes = solver.findMinimumPath(graph, start, end); if (minPathNodes.isEmpty()) { System.out.println("No path found!"); } else { System.out.println("Minimum path: " + minPathNodes); System.out.println("Minimum path length: " + (solver.minPath - graph[start][end])); } } } ``` 在上面的示例中,我们通过传入一个邻接矩阵 `graph`、起始节点 `start` 和目标节点 `end` 来调用 `findMinimumPath` 方法,它会返回最小路径上的节点列表。 请注意,这只是一个简单的示例,假设节点之间的路径长度都是非负整数。如果图中存在负权边,则需要使用其他算法,如Dijkstra算法或Bellman-Ford算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值