687. 最长同值路径
给定一个二叉树的 root
,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
两个节点之间的路径长度 由它们之间的边数表示。
示例 1:
输入:root = [5,4,5,1,1,5] 输出:2
示例 2:
输入:root = [1,4,5,4,4,5] 输出:2
提示:
- 树的节点数的范围是
[0, 104]
-1000 <= Node.val <= 1000
- 树的深度将不超过
1000
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int res = 0; int dfs(TreeNode* root) { if (root == nullptr) return 0; int left = dfs(root->left); int right = dfs(root->right); int ll = (root->left != nullptr && root->val == root->left->val)? left:0; int rr = (root->right != nullptr && root->val == root->right->val)?right:0; res = max(res,ll+rr+1); return max(ll,rr)+1; } int longestUnivaluePath(TreeNode* root) { if (root == nullptr) return 0; dfs(root); return res-1; } };