题目描述
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
class Solution {
public:
int ans;
void travel(TreeNode* root){
if(root == NULL) return;
int l =travel(root->left,root->val);
int r =travel(root->right,root->val);
ans = max(ans,l+r);
travel(root->left);
travel(root->right);
}
int travel(TreeNode* root,int val){
if(root == NULL || root->val != val) return 0;
int left = travel(root->left,val);
int right = travel(root->right,val);
return max(left,right)+1;
}
int longestUnivaluePath(TreeNode* root) {
ans = 0;
travel(root);
return ans;
}
};