题目
给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
两个节点之间的路径长度 由它们之间的边数表示。
示例 1:
输入:root = [5,4,5,1,1,5] 输出:2
示例 2:
输入:root = [1,4,5,4,4,5] 输出:2
解题
方法一:
class Solution { public: int res=0; int dfs(TreeNode* root){//返回当前节点作为终点的路径长度 if(!root) return 0; int left=dfs(root->left); int right=dfs(root->right); int left1=0,right1=0; if(root->left&&root->left->val==root->val){ left1=left+1;//当前节点和左边连上一条边 } if(root->right&&root->right->val==root->val){ right1=right+1;当前节点和右边连上一条边 } res=max(res,left1+right1);//更新 左右两边 边之和 return max(left1,right1); } int longestUnivaluePath(TreeNode* root) { dfs(root); return res; } };