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)\)