首页 > 解决方案 > BST中最长的单值路径

问题描述

我正在尝试解决问题:

给定一棵二叉树,找到路径中每个节点具有相同值的最长路径的长度。此路径可能会或可能不会通过根。

注意:两个节点之间的路径长度由它们之间的边数表示。

此处输入示例

我在大量输入时得到错误的答案。我的代码通过了 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;
        }
};

标签: recursionbinary-tree

解决方案


推荐阅读