题目:
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
思路:
https://leetcode.cn/problems/diameter-of-binary-tree/solutions/141431/543-by-ikaruga/?envType=study-plan-v2&envId=top-100-liked
C++:
#include<iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode()
{
left = right = nullptr;
}
TreeNode(int x)
{
val = x;
left = right = nullptr;
}
TreeNode(int x, TreeNode *left, TreeNode *right)
{
val = x;
left = left;
right = right;
}
};
// 后序遍历+递归
class Solution
{
public:
int diameterOfBinaryTree(TreeNode* root, int& ans)
{
if (root == nullptr) return 0;
int left = diameterOfBinaryTree(root->left, ans);
int right = diameterOfBinaryTree(root->right, ans);
ans = max(ans, left + right); // 递归子树的最大长度
return max(left, right) + 1; // 返回左右子树中的最大长度,用于向上后续的计算
}
int diameterOfBinaryTree(TreeNode* root)
{
int ans = 0;
diameterOfBinaryTree(root, ans);
return ans;
}
};