题目:
题解:
代码如下:
class Solution {
public:
int res=0;
//思路:左子树的最大深度+右子树的最大深度为二叉树的直径
//这个递归可以想象成记忆化dfs或者说分治法,只有当最小子问题解决时(达到叶子节点时,深度为1),总问题才能得到解决(左子树的深度+右子树的深度)
int diameterOfBinaryTree(TreeNode* root) {
if(!root)return 0;
maxDepth(root);
return res;
}
int maxDepth(TreeNode* root){
if(!root)return 0;
//获得左右子树的深度
int left=maxDepth(root->left),right=maxDepth(root->right);
res=max(res,left+right);
//最小子问题:到达叶子节点时,深度为1。最小子问题解决,那么其他问题也都会解决。
return max(left,right)+1;
}
};