我正在尝试解决问题:
给定一棵二叉树,找到路径中每个节点具有相同值的最长路径的长度。此路径可能会也可能不会通过根。
注意:两个节点之间的路径长度由它们之间的边数表示。
样本输入here
在输入大量内容时,我得到了错误的答案。我的代码通过了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;
}
};