/**
* 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 {
int maxlen=0;//全局变量;
public:
int longestUnivaluePath(TreeNode* root) {
len(root);
return maxlen;
}
int len(TreeNode* root){
if(root == NULL) return 0;
int currmaxlen=0;
int leftlen=0;
if(root->left != NULL){leftlen+=len(root->left);
if(root->val==root->left->val){leftlen++;}
else{leftlen=0;}
} //单独计算左边的,若节点与其子节点的值不同,则断掉
int rightlen=0;
if(root->right != NULL){rightlen+=len(root->right);
if(root->val==root->right->val){rightlen++;}
else{rightlen=0;}
}//单独计算右边的,若节点与其子节点的值不同,则断掉
if(root->left != NULL && root->right != NULL && root->val==root->left->val && root->val==root->right->val){
currmaxlen=leftlen+rightlen; } //只有当节点的左右两边都有且相等时才进行连接相加
else {currmaxlen=max(leftlen,rightlen);} //否则只选其中最大的一边;
maxlen=currmaxlen>maxlen?currmaxlen:maxlen; //递归操作,更新主函数的最大值;
return max(leftlen,rightlen);//返回当前函数最大值
}
};