1、题目描述

2、解题思路
给每一个节点搭配两个属性:inc 和 dcr 。
其中,inc 表示截至到当前节点的最长连续递增序列的长度,dcr 表示截至到当前节点的最长连续递减序列的长度。
那么,包含当前节点的连续序列路径的长度就是 inc + dec - 1。
接着找到 inc + dec - 1 值最大的节点,返回这个值即可。
3、解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int maxval = 0;
public int longestConsecutive(TreeNode root) {
longestPath(root);
return maxval;
}
public int[] longestPath(TreeNode root) {
if (root == null) {
return new int[]{0, 0};
}
int inr = 1, dcr = 1;
if (root.left != null) {
int[] l = longestPath(root.left);
if (root.val == root.left.val + 1) {
dcr = l[1] + 1;
} else if (root.val == root.left.val - 1) {
inr = l[0] + 1;
}
}
if (root.right != null) {
int[] r = longestPath(root.right);
if (root.val == root.right.val + 1) {
dcr = Math.max(dcr, r[1] + 1);
} else if (root.val == root.right.val - 1) {
inr = Math.max(inr, r[0] + 1);
}
}
maxval = Math.max(maxval, dcr + inr - 1);
return new int[]{inr, dcr};
}
}
本文介绍了一种算法,用于寻找二叉树中包含当前节点的最长连续递增或递减序列路径。通过为每个节点添加inc和dcr属性,分别记录最长连续递增和递减序列长度,最终找到最大序列路径。
1187

被折叠的 条评论
为什么被折叠?



