687. Longest Univalue Path

树的问题,递归来做。这道题考虑起来有些绕,记录一下。

对于任意一个节点,通过这个节点的最长路径是  以左节点为端点的最长路径+以右节点为端点的最长路径

因此 写一个函数 int dfs(TreeNode *root) 来计算以root为端点的最长路径,通过这个节点的最长路径在函数里计算并更新max即可。

注:543. Diameter of Binary Tree 几乎和这道题一模一样。

 

class Solution {
public:
    int res=0;
    
    int longestUnivaluePath(TreeNode* root) {
        dfs(root);   
        return res;
    }
    
    int dfs(TreeNode *root){
        if (root==NULL) return 0;
        int leftPath=dfs(root->left);
        int rightPath=dfs(root->right);
        int l=0, r=0;
        if (root->left && root->left->val==root->val) l=leftPath+1;
        if (root->right && root->right->val==root->val) r=rightPath+1;
        res = max(res,l+r);
        return max(l,r);
    }
};
posted @ 2018-07-11 21:08  約束の空  阅读(118)  评论(0)    收藏  举报