549. 二叉树中最长的连续序列
class Solution { public int longestConsecutive(TreeNode root) { dfs(root); return res; } private int res = 0; public int[] dfs(TreeNode root) { // 以root开始, path[0]:root为增位置的最长路径 path[1]:root为减位置的最长路径 int[] path = new int[]{1,1}; if(root == null) return null; // return什么没关系,左右子树为null不参与判断 int[] left = dfs(root.left); int[] right = dfs(root.right); if(root.left != null) { if(root.left.val - root.val == 1) { // 递减 path[1] += left[1]; } if(root.left.val - root.val == -1) { path[0] += left[0]; } } if(root.right != null) { if(root.right.val - root.val == 1) { path[1] = Math.max(path[1],right[1]+1); } if(root.right.val - root.val == -1) { path[0] = Math.max(path[0],right[0]+1); } } res = Math.max(res,path[0]+path[1]-1); return path; } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步