/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ int diameterOfBinaryTree(TreeNode* root) { if (root == nullptr) return 0; int ans = 0; maxDiameter(root, ans); return ans-1; } void maxDiameter(TreeNode* root, int& ans) { if (root == nullptr) return; int w = 1 + depth(root->left) + depth(root->right); ans = std::max(w, ans); maxDiameter(root->left, ans); maxDiameter(root->right, ans); } int depth(TreeNode* node) { if (node == nullptr) return 0; return 1 + std::max(depth(node->left), depth(node->right)); } };