687. Longest Univalue Path
5
/ \
4 5
/ \ \
1 1 5 1
/ \
4 5
/ \ \
4 4 5Last updated
5
/ \
4 5
/ \ \
1 1 5 1
/ \
4 5
/ \ \
4 4 5Last updated
int helper(TreeNode* node, int& res) { // time: O(n); space: O(n)
if (!node) return 0;
int left = helper(node->left, res); // the longest univalue path starting from left child
left = (node->left && node->left->val == node->val) ? left + 1 : 0;
int right = helper(node->right, res); // the longest univalue path starting from right child
right = (node->right && node->right->val == node->val) ? right + 1 : 0;
res = max(res, left + right);
return max(left, right);
}
int longestUnivaluePath(TreeNode* root) {
int res = 0;
helper(root, res);
return res;
}int helper(TreeNode* node, int parent, int& res) {
if (!node) return 0;
int left = helper(node->left, node->val, res);
int right = helper(node->right, node->val, res);
res = max(res, left + right);
if (node->val == parent) return max(left, right) + 1;
else return 0;
}
int longestUnivaluePath(TreeNode* root) {
int res = 0;
if (root) helper(root, root->val, res);
return res;
}