/*
二叉树的直径:
给定一棵二叉树,你需要计算它的直径长度。二叉树的直径长度是任意两个结点路径长度中的最大值。
*/
#include <iostream>
#include <climits>
#include<vector>
// 包含 LONG_MIN 和 LONG_MAX
using namespace std;
typedef struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
}TreeNode;
class Solution {
public:
int ans = 0;
int dfs(TreeNode* node) {
if (!node) {
return 0;
}
int l = dfs(node->left);
int r = dfs(node->right);
ans = max(ans, l + r );
return max(l, r) + 1;
}
int diameterOfBinaryTree(TreeNode* root) {
dfs(root);
return ans;
}
};
int main() {
// 测试代码
TreeNode* root = new TreeNode(5);
root->left = new TreeNode(4);
root->right = new TreeNode(4);
root->left->left = new TreeNode(11);
root->left->left->left = new TreeNode(7);
root->left->left->right = new TreeNode(2);
root->right->right = new TreeNode(11);
root->right->right->left = new TreeNode(2);
root->right->right->right = new TreeNode(7);
Solution d;
cout<< d.diameterOfBinaryTree(root);
return 0;
}