【LeetCode】687.Longest Univalue Path(Easy)解题报告
题目地址:https://leetcode.com/problems/longest-univalue-path/description/
题目描述:
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.
要有一种大局观,一个方法给我返回单独子树的最大长度,然后自己比较根节点和左右子树根节点的值就可以了。
Solution:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
Time complexity: O(n)
Space complexity: O(logn)
*/
class Solution {
public int res = 0;
public int longestUnivaluePath(TreeNode root) {
caculate(root);
return res;
}
//返回单独子树的最大长度
public int caculate(TreeNode root){
if(root==null){
return 0;
}
int leftCount = caculate(root.left);
int rightCount = caculate(root.right);
int left=0,right=0;
if(root.left!=null && root.left.val == root.val){
left = leftCount + 1;
}
if(root.right!=null && root.right.val == root.val){
right = rightCount + 1;
}
res = Math.max(res,left+right);
//返回一边子树的最大值
return Math.max(left,right);
}
}
Date:2017年11月22日