https://leetcode.cn/problems/longest-univalue-path/ 给定一个二叉树的 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 {
private:
int ans;
public:
int longestUnivaluePath(TreeNode* root) {
ans=0;
dfs(root);
return ans;
}
int dfs(TreeNode* root){
if(!root){
return 0;
}
int left=dfs(root->left);
int right=dfs(root->right);
if(root&&root->left&&root->val==root->left->val){
left++;
}else{
left=0;
}
if(root&&root->right&&root->val==root->right->val){
right++;
}else{
right=0;
}
ans=max(ans,right+left);
return max(right,left);
}
};

复杂度分析:

  • 时间复杂度 \(O (n)\)
  • 空间复杂度 \(O (n)\)