leecode刷题 二叉树的直径

简介: 给定一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度,这条路径可能经过也可能不经过根节点。两节点之间路径的长度由它们之间边数表示。

给你一棵二叉树的根节点,返回该树的 直径 。

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

示例 1:
image.png

输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
示例 2:

输入:root = [1,2]
输出:1

提示:

树中节点数目在范围 [1, 104] 内
-100 <= Node.val <= 100

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int max=0;
  public int diameterOfBinaryTree(TreeNode root) {
        if (root == null) return 0;
        deep(root);
        return max;
    }

    private int deep(TreeNode root) {
        if (root == null) return 0;
        // 递归计算左子树和右子树的最大深度
        int leftDepth = deep(root.left);
        int rightDepth = deep(root.right);
        max=Math.max(max,leftDepth+rightDepth);
        // 当前节点的最大深度是左子树和右子树深度的最大值加一
        return 1 + Math.max(leftDepth, rightDepth);
    }
}

我陷入了一个死胡同,认为只要求出左子树的最大深度+右子树的最大深度,就可以得出直径,这就存在一个误区,就是直径的路径不一定存在在根节点的一级子树中,如下图所示,直径路径存在在-9为根节点的子树中,所以必须递归对子树的直径进行更新,即要寻找的是这棵树中左右子树相加最大的值,而不是直接求左右子树的深度。

image.png

相关文章
|
2月前
leecode刷题 对称二叉树
给定一个二叉树的根节点 `root`,检查该二叉树是否轴对称。轴对称意味着二叉树的左子树和右子树在结构和值上都完全镜像对称。示例 1 中的树 `[1,2,2,3,4,4,3]` 是对称的,而示例 2 中的树 `[1,2,2,null,3,null,3]` 不是对称的。节点数在 1 到 1000 之间,节点值范围为 -100 到 100。代码通过递归检查左右子树是否镜像对称。
30 13
|
2月前
leecode刷题 翻转二叉树
给定一棵二叉树的根节点 `root`,翻转这棵二叉树并返回其根节点。通过递归交换每个节点的左右子树来实现翻转。示例 1:输入 `root = [4,2,7,1,3,6,9]`,输出 `[4,7,2,9,6,3,1]`。示例 2:输入 `root = [2,1,3]`,输出 `[2,3,1]`。示例 3:输入 `root = []`,输出 `[]`。树中节点数目范围在 [0, 100] 内,节点值范围为 -100 到 100。
|
2月前
leecode 刷题 二叉树的最大深度
给定二叉树根节点 `root`,返回其最大深度。最大深度是从根节点到最远叶子节点的最长路径上的节点数。例如,对于输入 `[3,9,20,null,null,15,7]`,输出为 `3`;对于输入 `[1,null,2]`,输出为 `2`。节点数量在 `[0, 104]` 范围内,值在 `[-100, 100]` 之间。
|
8月前
|
存储 物联网
【洛谷 P1135】奇怪的电梯 题解(广度优先搜索)
这是一个关于奇怪电梯的编程问题摘要: - 电梯在每层停,且每层有特定数字 $K_i$ 决定上/下按钮的功能。 - 目标是从 $A$ 楼到 $B$ 楼,求最少按键次数,若无法到达则输出 `-1`。 - 输入包括 $N$(楼层数)、$A$(起点)和 $B$(终点),以及每层的 $K_i$ 数字。 - 使用广度优先搜索(BFS)解决,通过队列存储访问过的楼层,避免重复并计算步数。 - 当到达目标楼层时返回步数,队列空时返回 `-1`。
68 0
|
9月前
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
79 0
力扣 C++|一题多解之动态规划专题(2)
|
9月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
69 0
力扣 C++|一题多解之动态规划专题(1)
【LeetCode-每日一题】-120. 三角形最小路径和
【LeetCode-每日一题】-120. 三角形最小路径和
|
9月前
|
算法
六六力扣刷题二叉树之翻转二叉树
六六力扣刷题二叉树之翻转二叉树
68 0
Leecode543. 二叉树的直径
Leecode543. 二叉树的直径
44 0
洛谷 P1141 01迷宫
洛谷 P1141 01迷宫
89 0

热门文章

最新文章