543. 二叉树的直径

发布时间 2023-12-13 23:38:24作者: DawnTraveler

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, 10^{4}]\)
  • \(-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;
    }
};