https://leetcode-cn.com/problems/longest-univalue-path/
二叉树的递归套路
与x无关
左右子树的max去pk一下
与x有关
- 1)x自己
- 2)x 连同左树
- 3)x 连同右树
- 4)x连同左树和右树
public int longestUnivaluePath(TreeNode root) {if (root == null) {return 0;}return process(root).max - 1;}public class Info {public int len; // 路径必须以x为开头且只能往下走的情况下,路径的最大距离public int max; // 路径不要求必须从x出发的情况下,整棵树的合法路径的最大距离public Info(int l, int m) {len = l;max = m;}}private Info process(TreeNode x) {if (x == null) {return new Info(0, 0);}TreeNode l = x.left;TreeNode r = x.right;Info lInfo = process(l);Info rInfo = process(r);// x自己int len = 1;if (l != null && x.val == l.val) {len = lInfo.len + 1;}if (r != null && x.val == r.val) {len = Math.max(len, rInfo.len + 1);}// 这一句代码就把5种情况pk了一下int max = Math.max(Math.max(lInfo.max, rInfo.max), len);if (l != null && r != null && x.val == l.val && x.val == r.val) {max = Math.max(max, lInfo.len + rInfo.len + 1);}return new Info(len, max);}
