[二叉树][dfs]leetcode543:二叉树的直径(easy)

题目:
在这里插入图片描述
题解:

代码如下:

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;
    }
};
发布了484 篇原创文章 · 获赞 149 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/103917161