Leetcode 687. Longest Univalue Path

Leetcode 687. Longest Univalue Path

Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.The length of path between two nodes is represented by the number of edges between them.

题目大意:
给定一棵二叉树,返回这棵树结点值相同的最大路径长度,路径长度以连接结点的边数为准,该路径可能不经过根结点。

解题思路:
以每一个结点为起点分别遍历左右子树,如果左(右)子结点存在且值与当前结点值相等,则左(右)值相等路径长加一,比较左右值,取大者为当前结点的值,采用递归实现。

代码:

class Solution {
public:
    int longestUnivaluePath(TreeNode* root) {
        if(!root)
            return 0;
        int res = 0;
        helper(root, res);
        return res;
    }
    
    int helper(TreeNode* root, int &res){
        int left, right;
        left = root->left ? helper(root->left, res) : 0;
        right = root->right ? helper(root->right, res) : 0;
        left = (root->left && root->left->val == root->val) ? left + 1 : 0;
        right = (root->right && root->right->val == root->val) ? right + 1 : 0;
        res = max(res, left + right);
        return max(left, right);
    }
};

你可能感兴趣的:(Leetcode)