LeetCode 298. 二叉树最长连续序列

题目描述

298. 二叉树最长连续序列

思路分析

解法一:DFS(推荐)

核心思路

  • 从根节点开始 DFS,记录当前连续长度。
  • 若子节点值等于父节点值 +1,则长度加一;否则重置为 1。
  • 维护全局最大值。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示节点数。
  • 空间复杂度:O(h),递归栈空间。
class Solution {
    private int best = 0;

    public int longestConsecutive(TreeNode root) {
        dfs(root, 0, 0);
        return best;
    }

    private void dfs(TreeNode node, int parentVal, int len) {
        if (node == null) {
            return;
        }

        if (node.val == parentVal + 1) {
            len++;
        } else {
            len = 1;
        }

        best = Math.max(best, len);
        dfs(node.left, node.val, len);
        dfs(node.right, node.val, len);
    }
}
func longestConsecutive(root *TreeNode) int {
	best := 0
	var dfs func(*TreeNode, int, int)

	dfs = func(node *TreeNode, parentVal int, length int) {
		if node == nil {
			return
		}

		if node.Val == parentVal+1 {
			length++
		} else {
			length = 1
		}

		if length > best {
			best = length
		}
		dfs(node.Left, node.Val, length)
		dfs(node.Right, node.Val, length)
	}

	dfs(root, -1<<60, 0)
	return best
}

相似题目

题目 难度 考察点
298. 二叉树最长连续序列 中等 DFS
687. 最长同值路径 中等 DFS
543. 二叉树的直径 简单 DFS
112. 路径总和 简单 DFS
124. 二叉树中的最大路径和 困难 DFS
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/33342683
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!