Leetcode 687. 最长同值路径
题目
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
**注意:**两个节点之间的路径长度由它们之间的边数表示。
测试样例
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
题解
递归实现
判断当前节点和左右子树根节点是否相同,不相同则获取的值无效。详细过程见代码
代码
int ans = 1;
int longest(TreeNode* root){
if(root == NULL) return 0;
int left = longest(root->left); //求和左子树根节点值相同的最长路径(无拐弯)
int right = longest(root->right); //求和右子树根节点值相同的最长路径(无拐弯)
int now = 1;
if(!(root->left && root->val==root->left->val)) left=0 ; //左子树和当前根节点值不同,则left=0
if(!(root->right && root->val==root->right->val)) right=0; //右子树和当前根节点值不同,则left=0
ans = max(ans,now+left+right);
return now+max(left,right);
}
int longestUnivaluePath(TreeNode* root) {
longest(root);
return ans-1;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。