LeetCode:543二叉树的直径

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 maxDiameter = 0;

    public int diameterOfBinaryTree(TreeNode root) {
        getDepth(root);
        return maxDiameter;    
    }
    //返回当前以node为根的子树的最大深度
    private int getDepth(TreeNode node){
        if(node == null){
            return 0;
        }
        //左右子树的深度
        int leftDepth = getDepth(node.left);
        int rightDepth = getDepth(node.right);
        //记算最大直径
        maxDiameter = Math.max(maxDiameter,leftDepth + rightDepth);

        return Math.max(leftDepth , rightDepth) + 1;
    }
}

路径可能不经过root节点,也就是说可能只在一边,所以不能直接只去计算左子树深度+右子树深度。

所以对于每个节点都要计算出它的左子树+右子树的深度

相关推荐
ComputerInBook7 小时前
Euclid 几何变换——仿射(affine)变换
算法·仿射变换·几何变换
一只叁木Meow7 小时前
电商 SKU 选择器:用算法实现优雅的用户交互
前端·javascript·算法
代码中介商7 小时前
红黑树完全指南:从五条性质到完整插入删除实现
数据结构·算法
JieE2127 小时前
反转链表:从双指针到递归,吃透链表反转的核心逻辑
javascript·算法
玖釉-8 小时前
旋转图像:从矩阵转置、镜像到坐标变换的系统理解
c++·windows·算法·图形渲染
fengenrong8 小时前
20260522
算法
一条大祥脚8 小时前
Codeforces Round 1099 (Div. 2) 构造|贪心|图论|还原数组
java·算法·图论
huaCodeA8 小时前
Android面试-Flow相关
android·面试·职场和发展
JAVA社区9 小时前
Java进阶全套教程(三)—— Spring框架核心精讲
java·开发语言·spring·面试·职场和发展·mybatis
Sheldon Chao9 小时前
Lecture 7 基于策略梯度的算法
人工智能·算法·机器学习