687最長のパスの値
最長経路を見つけるために、二分木を与え、このパス内の各ノードは、同じ値を有します。このパスは、またはルートノードを通過してもしなくてもよいです。
注:2つのノード間の経路の長さは、それらの間のエッジの数で表されます。
例1:
入力:
5
/ \
4 5
/ \ \
1 1 5
出力:
2
例2:
入力:
1
/ \
4 5
/ \ \
4 4 5
出力:
2
注:指定したバイナリツリーではない1万の以上のノード。木の高さは、1000年を超えてはなりません。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int maxL = 0;
public int longestUnivaluePath(TreeNode root) {
if(root == null) return 0;
getMaxL(root, root.val);
return maxL;
}
private int getMaxL(TreeNode r, int val) {
if(r == null) return 0;
int left = getMaxL(r.left, r.val);
int right = getMaxL(r.right, r.val);
maxL = Math.max(maxL, left+right); // 路径长度为节点数减1所以此处不加1
if(r.val == val) // 和父节点值相同才返回以当前节点所能构成的最长通知路径长度, 否则返回0
return Math.max(left, right) + 1;
return 0;
}
}