力扣每日一题:1372.二叉树中的最长交错路径

题目

给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:

  • 选择二叉树中 任意 节点和一个方向(左或者右)。
  • 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。
  • 改变前进方向:左变右或者右变左。
  • 重复第二步和第三步,直到你在树中无法继续移动。

交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。

请你返回给定树中最长 交错路径 的长度。

示例 1:

复制代码
输入:root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
输出:3
解释:蓝色节点为树中最长交错路径(右 -> 左 -> 右)。

示例 2:

复制代码
输入:root = [1,1,1,null,1,null,null,1,1,null,1]
输出:4
解释:蓝色节点为树中最长交错路径(左 -> 右 -> 左 -> 右)。

示例 3:

复制代码
输入:root = [1]
输出:0

提示:

  • 每棵树最多有 50000 个节点。
  • 每个节点的值在 [1, 100] 之间。

思路:

题目的路线要求左变右,右变左,那么我们可以记录在每次dfs时记录上一次路线是左边还是右边。然后比较这次走左边和走右边的大小。

如果上一次是走左边,那么这一次走右边的len就加1,这一次还是走左边的len就归0.

同理右边也是一样。

n记录上一次走的是左边还是右边

//1表示走左边,-1表示走右边

java 复制代码
class Solution {
    public int longestZigZag(TreeNode root) {
        return Math.max(dfs(root.left,1,0),dfs(root.right,-1,0));
    }
    public int dfs(TreeNode root,int n,int len){   //n记录上一次走的是左边还是右边
                                                   //1表示走左边,-1表示走右边
        if(root==null){
            return len;
        }
        if(n==1){
            return Math.max(dfs(root.right,-1,len+1),dfs(root.left,1,0));
        }else{
            return Math.max(dfs(root.left,1,len+1),dfs(root.right,-1,0));
        }
    }
}
相关推荐
MATLAB代码顾问7 分钟前
如何用MATLAB计算多边形的几何中心
算法·机器学习·matlab
xcLeigh10 分钟前
HTML5好看的水果蔬菜在线商城网站源码系列模板2
java·前端·html5
啊QQQQQ11 分钟前
C++11(3)
java·开发语言·c++
戊子仲秋12 分钟前
【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)
算法·leetcode
岳轩子17 分钟前
linux安装jdk
java·linux·运维
解孔明18 分钟前
Java如何扫描指定包下所有类?
java·开发语言
CV金科19 分钟前
蓝桥杯-STM32G431RBT6(UART解析字符串sscanf和解决串口BUG)
c语言·stm32·单片机·嵌入式硬件·mcu·算法·bug
机器学习之心26 分钟前
顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测
算法·lstm·transformer·多变量回归预测·poa
睆小白31 分钟前
【springboot】实现文件上传和下载
java·spring boot·后端
ChinaRainbowSea36 分钟前
十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能
java·spring boot·后端·spring·web