题目描述
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
Sample Code
先分别计算当前节点的左右同值路径的长度,更新 总最长同值路径,然后把左右子树之一返回给上一层(如果和上一层同值的话)
class Solution {
private int maxLen = 0;
public int longestUnivaluePath(TreeNode root) {
if(root == null) return 0;
getMax(root, root.val);
return maxLen;
}
private int getMax(TreeNode root, int par_val) {
if(root == null) return 0;
int le = getMax(root.left, root.val);
int ri = getMax(root.right, root.val);
maxLen = Math.max(maxLen, le + ri);
if(root.val == par_val)
return Math.max(le, ri) + 1;
return 0;
}
}