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
相关推荐
Blossom.1182 小时前
移动端部署噩梦终结者:动态稀疏视觉Transformer的量化实战
java·人工智能·python·深度学习·算法·机器学习·transformer
AiXed3 小时前
PC微信协议之AES-192-GCM算法
前端·数据库·python
灵光通码3 小时前
神经网络基本概念
python·神经网络
Petrichor_H_5 小时前
DAY 31 文件的规范拆分和写法
python
pilgrim536 小时前
结合 Leetcode 题探究KMP算法
算法·leetcode
咚咚王者6 小时前
人工智能之编程进阶 Python高级:第九章 爬虫类模块
开发语言·python
深蓝海拓6 小时前
使matplot显示支持中文和负号
开发语言·python
狂炫冰美式7 小时前
前端实时推送 & WebSocket 面试题(2026版)
前端·http·面试
AntBlack7 小时前
AI Agent : CrewAI 简单使用 + 尝试一下股票分析
后端·python·ai编程
一眼万里*e7 小时前
搭建本地deepseek大模型
python