543. 二叉树的直径

1.题目介绍

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

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

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

示例 1:

输入: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

2.题解

2.1

思路

这题可以说 是二叉树最大深度的拓展,主体思路还是使用递归,从下往上分别求得左右子树的最大深度。
这时候通过当前层该根节点的节点数最大为:左子树最大深度+右子树最大深度+1,而最大直径等于这个值-1.
这里设置一个全局变量ans来存储这个最大直径时,每次计算一个根节点的最大深度同时,也计算出其最大直径并跟ans比较,更新ans值。

代码

class Solution {
public:
    int ans;
    int depth(TreeNode* root){
        if (root == nullptr) return 0;
        int left = depth(root->left);
        int right = depth(root->right);
        ans = max(ans, left + right);
        return max(left,right) + 1;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        ans = 0;
        depth(root);
        return ans;
    }
};
posted @   DawnTraveler  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示