题意
求树的直径
思路
首先,树的直径不一定经过根节点。
然后,我们想树的直径一定是以某个点作为根节点,然后左子树的最长边 + 右子树的最长边。
所以,我们只需要在dfs求最长边的过程中更新一下直径即可。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
int d = 0;
public:
int dfs(TreeNode* now) {
if (!now) return 0;
int len1 = dfs(now->left);
int len2 = dfs(now->right);
d = max(d, len1 + len2);
return max(len1, len2) + 1;
}
int diameterOfBinaryTree(TreeNode* root) {
dfs(root);
return d;
}
};