687. 最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
private Info solve(TreeNode root) {
if (root == null) {
return new Info(0, 0);
}
Info left = solve(root.left);
Info right = solve(root.right);
int leftNodes = 0, rightNodes = 0;
if (root.left != null && root.val == root.left.val) {
leftNodes = left.nodes + 1;
}
if (root.right != null && root.val == root.right.val) {
rightNodes = right.nodes + 1;
}
int nodes = Math.max(leftNodes, rightNodes);
int maxNodes = Math.max(leftNodes + rightNodes + 1, Math.max(left.maxNodes, right.maxNodes));
return new Info(nodes, maxNodes);
}
public int longestUnivaluePath(TreeNode root) {
if (root == null) {
return 0;
}
return solve(root).maxNodes - 1;
}
}
class Info {
int nodes;
int maxNodes;
public Info(int nodes, int maxNodes) {
this.nodes = nodes;
this.maxNodes = maxNodes;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号