[leetcode] 687. Longest Univalue Path
来源:互联网 发布:c 串口通信编程 编辑:程序博客网 时间:2024/04/26 10:17
Question:
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
Solution:
一开始搞错了,原来要求的是最长的路径,所以就不可以往回走,只能是两个节点的路径,那这个路径就可以表示为一个根结点到左边的最长路径+到右边最长路径,简单的对每一个根结点往左往右递归求解就好。
对每一个结点,以其作为根结点,对左右分别dfs求得从当前节点出发左边最长和右边最长的值,然后加起来和max对比,如果大于max则替换max。然后返回上一层,返回上一层的数要为左边或右边的最大值,而不是相加值,因为对于父节点为根结点的话只能往左或者往右寻找最长路径,而不能先去左边然后去右边然后返回。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int longestUnivaluePath(TreeNode* root) { if (!root) return 0; int max = 0; dfs(root, max); return max; } int dfs(TreeNode* root, int & max) { int l = 0, r = 0; if (root->left && root->left->val == root->val) l = 1 + dfs(root->left, max); else if (root->left) dfs(root->left, max); if (root->right && root->right->val == root->val) r = 1 + dfs(root->right, max); else if (root->right) dfs(root->right, max); if (l+r > max) max = l+r; return (l > r) ? l : r; }};
阅读全文
0 0
- [leetcode] 687. Longest Univalue Path
- leetcode 687. Longest Univalue Path
- 687. Longest Univalue Path
- 687. Longest Univalue Path
- 687. Longest Univalue Path
- 687. Longest Univalue Path
- 【LeetCode】687.Longest Univalue Path(Easy)解题报告
- leetcode 687. Longest Univalue Path 深度优先遍历DFS
- LWC 52:687. Longest Univalue Path
- (树)687. Longest Univalue Path
- LeetCode687. Longest Univalue Path
- Longest Univalue Path
- LeetCode687. Longest Univalue Path
- LeetCode Weekly Contest 52 Longest Univalue Path(链表dfs)
- Longest Univalue Path问题及解法
- leetcode_687. Longest Univalue Path ? 待解决
- [437]. Path Sum III,[687]. Longest Univalue Path
- Leetcode: Count Univalue Subtrees
- Linux部署dubbo流程介绍
- 一个PHP文件搞定支付宝系列之手机网站支付(兼容微信浏览器)
- 58. Length of Last Word
- 7.3 计算两整数的最大值,
- Hadoop源码分析:FileSystem类
- [leetcode] 687. Longest Univalue Path
- 分布式系统的十二个目标
- 判断两个二叉树是否相同(c++递归实现)
- java自定义异常
- redis应用简单说
- POJ-2689 Prime Distance(筛素数的平移)
- java异常处理
- java中main方法调用自身main方法
- 二叉树遍历(遍历C#实现)