leetcode尊享面试100题(549二叉树最长连续序列||,python)

题目不长,就是分析时间太久了。

思路使用dfs深度遍历,先想好这个函数返回什么,题目给出路径可以是子-父-子的路径,那么1-2-3可以,3-2-1也可以,那么考虑dfs返回两个值,对于当前节点node来说,返回一个顺序的长度的最大值p,一个逆序长度的最大值b,初始值都为1。例如,当前节点值为3,下面有两个子节点1-2,那么p为3,b仍为1。

这是返回的值,那么对于当前节点,以node为终点的最大长度=max(p,b),还有一种经过node节点的路径需要考虑,例如,左节点为1,右节点为3,当前节点为2。

这题需要把所有的情况罗列一遍,就是多几个if语句!!!

python 复制代码
class Solution:
    def __init__(self):
        self.m = 1

    def longestConsecutive(self, root: Optional[TreeNode]) -> int:
        self.dfs(root)
        return self.m
    
    def dfs(self, node):
        if not node: return 0, 0
        p, b, m = 1, 1, 1
        p1, b1 = self.dfs(node.left)
        p2, b2 = self.dfs(node.right)
        if node.left and abs(node.left.val - node.val) == 1:
            if node.left.val - node.val == -1:
                p = max(p, p1 + 1)
            else:
                b = max(b, b1 + 1)
        if node.right and abs(node.right.val - node.val) == 1:
            if node.right.val - node.val == -1:
                p = max(p, p2 + 1)
            else:
                b = max(b, b2 + 1)
        if node.left and node.right and node.left.val - node.val ==  node.val - node.right.val:
            if node.left.val - node.val == -1:
                m = b2 + p1 + 1
            elif node.left.val - node.val == 1:
                m = b1 + p2 + 1
        self.m = max(self.m, p, b, m)
        return p, b
相关推荐
pixle024 分钟前
【 LangChain v1.2 入门系列教程】【四】结构化输出,让 Agent 返回可预测的结构
python·ai·langchain·agent·智能体
木心术130 分钟前
openclaw与Hermes的优劣势对比
人工智能·python·opencv·自动化
潇洒畅想35 分钟前
1.2 希腊字母速查表 + 公式阅读实战
java·人工智能·python·算法·rust·云计算
深度学习lover43 分钟前
<数据集>yolo 瓶盖识别<目标检测>
人工智能·python·yolo·计算机视觉·瓶盖识别
测绘第一深情1 小时前
MapQR:自动驾驶在线矢量化高精地图构建的端到端 SOTA 方法
数据结构·人工智能·python·神经网络·算法·机器学习·自动驾驶
Olivia_0_0_1 小时前
【面试题】操作系统面试题整理——具身智能 / 自动驾驶 / 嵌入式 / 后台开发通用
面试
高洁011 小时前
AI算法实战:逻辑回归在风控场景中的应用
人工智能·python·深度学习·transformer
穿条秋裤到处跑1 小时前
每日一道leetcode(2026.04.11):三个相等元素之间的最小距离 II
算法·leetcode
书香门第1 小时前
搭建免费的Ollama AI Agent
人工智能·python·ollama
小白学大数据1 小时前
分布式爬虫核心技术详解与工程实践
开发语言·分布式·爬虫·python