543.二叉树的直径

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

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

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

java 复制代码
/**
 * 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 ans = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return ans;
    }
    public int dfs(TreeNode node) {
        if ( node == null) {
            return -1; // dfs(null) + 1 = 0 这样空节点的左右链长都是为0
        }

        int leftLen = dfs(node.left) + 1; // 左子树最大链长 + 1
        int rightLen = dfs(node.right) + 1; // 右子树最大链长 + 1
        ans = Math.max(ans, leftLen + rightLen); // 两条链拼成路径
        return Math.max(leftLen, rightLen);  // 当前子树最大链长
    }
}
相关推荐
砍材农夫1 天前
spring-ai 第四多模态API
java·人工智能·spring
她说..1 天前
Java 对象相关高频面试题
java·开发语言·spring·java-ee
汀、人工智能1 天前
[特殊字符] 第21课:最长有效括号
数据结构·算法·数据库架构·图论·bfs·最长有效括号
Boop_wu1 天前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
庞轩px1 天前
深入理解 sleep() 与 wait():从基础到监视器队列
java·开发语言·线程··wait·sleep·监视器
故事和你911 天前
洛谷-算法1-2-排序2
开发语言·数据结构·c++·算法·动态规划·图论
Fcy6481 天前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
皮皮林5511 天前
面试官:ZSet 的底层实现是什么?
java
kvo7f2JTy1 天前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
码云数智-大飞1 天前
C++ RAII机制:资源管理的“自动化”哲学
java·服务器·php