[LeetCode] 687. Longest Univalue Path 最长唯一值路径
2024-10-20 13:42:56
Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.
Note: The length of path between two nodes is represented by the number of edges between them.
Example 1:
Input:
5
/ \
4 5
/ \ \
1 1 5
Output:
2
Example 2:
Input:
1
/ \
4 5
/ \ \
4 4 5
Output:
2
Note: The given binary tree has not more than 10000 nodes. The height of the tree is not more than 1000.
给一个二叉树,找出最长的相同值路径,与250. Count Univalue Subtrees类似。
解法:递归
Java:
class Solution {
public int longestUnivaluePath(TreeNode root) {
int[] res = new int[1];
if (root != null) dfs(root, res);
return res[0];
} private int dfs(TreeNode node, int[] res) {
int l = node.left != null ? dfs(node.left, res) : 0; // Longest-Univalue-Path-Start-At - left child
int r = node.right != null ? dfs(node.right, res) : 0; // Longest-Univalue-Path-Start-At - right child
int resl = node.left != null && node.left.val == node.val ? l + 1 : 0; // Longest-Univalue-Path-Start-At - node, and go left
int resr = node.right != null && node.right.val == node.val ? r + 1 : 0; // Longest-Univalue-Path-Start-At - node, and go right
res[0] = Math.max(res[0], resl + resr); // Longest-Univalue-Path-Across - node
return Math.max(resl, resr);
}
}
Python:
# Time: O(n)
# Space: O(n)
class Solution(object):
def longestUnivaluePath(self, root):
"""
:type root: TreeNode
:rtype: int
"""
longest = [0]
def traverse(node):
if not node:
return 0
left_len, right_len = traverse(node.left), traverse(node.right)
left = (left_len + 1) if node.left and node.left.val == node.val else 0
right = (right_len + 1) if node.right and node.right.val == node.val else 0
longest[0] = max(longest[0], left + right)
return max(left, right)
traverse(root)
return longest[0]
Python:
# Time: O(n)
# Space: O(h)
class Solution(object):
def longestUnivaluePath(self, root):
"""
:type root: TreeNode
:rtype: int
"""
result = [0]
def dfs(node):
if not node:
return 0
left, right = dfs(node.left), dfs(node.right)
left = (left+1) if node.left and node.left.val == node.val else 0
right = (right+1) if node.right and node.right.val == node.val else 0
result[0] = max(result[0], left+right)
return max(left, right) dfs(root)
return result[0]
C++:
class Solution {
public:
int longestUnivaluePath(TreeNode* root) {
int lup = 0;
if (root) dfs(root, lup);
return lup;
} private:
int dfs(TreeNode* node, int& lup) {
int l = node->left ? dfs(node->left, lup) : 0;
int r = node->right ? dfs(node->right, lup) : 0;
int resl = node->left && node->left->val == node->val ? l + 1 : 0;
int resr = node->right && node->right->val == node->val ? r + 1 : 0;
lup = max(lup, resl + resr);
return max(resl, resr);
}
};
类似题目:
[LeetCode] 250. Count Univalue Subtrees 计数相同值子树的个数
All LeetCode Questions List 题目汇总
最新文章
- 20155315庄艺霖--对做中学的理解及对c语言和Java的看法
- PHP去重算法的优化过程
- HTML实现简单计算器
- 传智播客--高级控件--showdialog关闭(小白内容)
- java实现二分查找
- hdu Farm Irrigation
- Dynamic CRM 2013学习笔记(四十)流程3 - 对话(Dialog)用法图解
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径 转
- LeetCode Subsets (DFS)
- spark结合 Openfire服务器,发送聊天消息
- CoreData的简单使用(二)数据的增删改查,轻量级的版本迁移
- php 登录实例演示
- Spring教程笔记(3) Bean
- Druid中配置双数据库
- 讲讲网络模块中加解密那点儿事--AES+BASE64
- 修复android 5.0 Xutils的框架问题retry error, curr request is null
- 3990 [模板]矩阵快速幂 洛谷luogu
- 洛谷P1638逛画展
- laravel 查询指定字段的值
- 使用shell数据处理数据实例①-------手把手教学版
热门文章
- JMeter压测时报“内存不足”故障的9个简单解决方案
- python测试开发django-rest-framework-65.序列化(ModelSerializer)
- 数组,字符串,json互相转换
- Alpha冲刺随笔九:第九天
- js元素remove
- Ubuntu 18.04 手动编译安装 ffmpeg
- [Codeforces 1242B]0-1 MST
- vue之大文件分段上传、断点续传
- pgloader 学习(八) pg 2 pg 简单demo
- Pollard-Rho算法求大数质因子