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);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值