哎,本来是一道 easy,结果还是写了半天。主要思路就是用一个引用变量来记录最长值,如果发现连续的长度大于最长值,就要更新它。
递归函数的返回值是连续最长的数字的个数,在递归函数中的时候,如果当前数字和之前的数字相同,则把长度加一,否则的话长度要从零开始。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public: int longestUnivaluePath(TreeNode* root) { if(root==nullptr) return 0; int longest=0; helper(root,longest); return longest; } int helper(TreeNode* root,int& longest){ if(root==nullptr) return 0; int left=helper(root->left,longest); int right=helper(root->right,longest); if(root->left && root->left->val==root->val) left+=1; else left=0; if(root->right && root->right->val==root->val) right+=1; else right=0; if(left+right>longest) longest=left+right; return left>right?left:right; } };
|