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节点,也就是说可能只在一边,所以不能直接只去计算左子树深度+右子树深度。

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

相关推荐
wdfk_prog2 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
wdfk_prog4 小时前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
QXWZ_IA7 小时前
1库1图1批是什么?千寻位置公安地图数据体系详解
科技·算法·能源·媒体·交通物流·政务
c238567 小时前
Bug 猎手入门指南
c++·算法·bug
Reart8 小时前
Leetcode 213.打家劫舍2(内含闲谈,打劫真是技术活,好题,716)
后端·算法
Reart9 小时前
Leetcode 198.打家劫舍(716)
后端·算法
Jerry9 小时前
LeetCode 110. 平衡二叉树
算法
玖玥拾9 小时前
C++ 数据结构 八大基础排序算法专题
数据结构·c++·算法·排序算法
Tim_109 小时前
【C++】017、new/delete与malloc/free的区别
java·数据结构·算法