LeetCode 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 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!