Я пытаюсь решить проблему:
По заданному двоичному дереву найдите длину самого длинного пути, где каждый узел в пути имеет одинаковое значение.Этот путь может проходить или не проходить через корень.
Примечание. Длина пути между двумя узлами представлена числом ребер между ними.
Примеры входных данных здесь
Я получаю неправильный ответ на большом входе.Мой код проходит 46 тестов, но после этого не проходит.Я не понимаю, где я ошибся.Может кто-нибудь, пожалуйста, помогите.
Вот мой код:
class Solution
{
public:
int longestPath = 0;
int findLongestPath(TreeNode *root, int depth)
{
int leftDepth, rightDepth;
leftDepth = rightDepth = 0;
if (root->left != 0 && root->left->val == root->val)
leftDepth = findLongestPath(root->left, depth + 1);
if (root->right != 0 && root->right->val == root->val)
rightDepth = findLongestPath(root->right, depth + 1);
longestPath = max(longestPath, leftDepth + rightDepth);
return max(max(leftDepth, rightDepth), depth);
}
void traverse(TreeNode *root)
{
if (root == 0)
return;
findLongestPath(root, 0);
traverse(root->left);
traverse(root->right);
}
int longestUnivaluePath(TreeNode *root)
{
traverse(root);
return longestPath;
}
};