687. Longest Univalue Path 发表于 2022-01-14 12345678910111213141516171819202122232425262728293031323334class Solution { private static class Holder { private int maxPathLength; } public int longestUnivaluePath(TreeNode root) { Holder holder = new Holder(); dfs(root, holder); return holder.maxPathLength; } private int dfs(TreeNode root, Holder holder) { if (root == null) { return 0; } // 自底向上 int leftMaxPathLength = dfs(root.left, holder); int rightMaxPathLength = dfs(root.right, holder); int leftGain = 0, rightGain = 0; // 此处保证节点连续,即 root 值与子节点不同则不会累加左子树或右子树的路径长度 if (root.left != null && root.left.val == root.val) { leftGain = leftMaxPathLength + 1; } if (root.right != null && root.right.val == root.val) { rightGain = rightMaxPathLength + 1; } holder.maxPathLength = Math.max(holder.maxPathLength, leftGain + rightGain); return Math.max(leftGain, rightGain); }} Reference687. Longest Univalue Path