LeetCode算法题解 543-二叉树的直径

题目描述

题解:

这道题我刚开始的思路是:求出以根节点为中心,左子树的最大深度(从1开始) + 右子树的最大深度,对于样例来说就是:左子树深度(2) + 右子树深度(1) = 3,但是有个样例通不过,问题就出现在两个节点路径长度的最大值不一定根节点在中间的,有可能是任意的一个节点(也就是可能某个子节点在中间,两边的深度之和更大) ,所以递归的每个节点的时候都要求一次左右两边最大深度之和,然后记录下最大值。

代码:

/**
 * 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 {
public:
    int maxLen = 0;
    
    int diameterOfBinaryTree(TreeNode* root) {
        if(root == NULL)
        {
            return 0;
        }
        sovle(root);
        return maxLen;
    }
    
    int sovle(TreeNode* node)
    {
        if(node == NULL)
        {
            return 0;
        }
        int leftDepth = sovle(node->left);
        int rightDepth = sovle(node->right);
        if(leftDepth+rightDepth > maxLen)
        {
            maxLen = leftDepth+rightDepth;
        }
        return max(leftDepth,rightDepth) + 1;
    }
};

你可能感兴趣的:(#,LeetCode)