题目:
687. Longest Univalue Path(easy)
题目大意:
最长同值路径。
在同一个二叉树中找到具有相同结点值之间的最长路径,并且这个路径可以不经过根节点。
解题思路:
递归求高度的变形,有点像543.二叉树的直径那道题。两道题的思路非常相近,但是这里要求路径的长度必须是相同元素构成的。
注意遇到相同的元素时+1,不同的元素是返回0,而不是返回最大值。
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Java:
public int longestUnivaluePath(TreeNode root){
if(root == null) return 0;
int[] path = new int[1];
/* 这里不能用int path = 0;因为形参和实参的区别。
详见这个网址 https://zhidao.baidu.com/question/1547035486282498107.html
*/
longestUnivaluePath(root,path);
return path[0];
}
//再写一个可以用来递归,来求得最大的函数重载形式
private int longestUnivaluePath(TreeNode node,int[] path){
if(node == null) return 0;
int left = longestUnivaluePath(node.left,path);
int right = longestUnivaluePath(node.right,path);
int leftPath = 0, rightPath = 0;
if(node.left != null && node.left.val == node.val){
leftPath += left + 1;
}
if(node.right != null && node.right.val == node.val){
rightPath += right + 1;
}
path[0] = Math.max(path[0],leftPath + rightPath);
return Math.max(leftPath,rightPath);
//注意这里不是什么时候都加1,只有满足情况的时候才加1,而且加1的操作已经在上面leftPath和rightPath两步做了。
}
Python: