二叉树中的最长交错路径

题目链接

二叉树中的最长交错路径

题目描述



注意点

  • 每个节点的值在 [1, 100] 之间

解答思路

  • 深度优先遍历整棵树,遍历的同时需要将到达根节点是向左交叉还是向右交叉以及路径长度传递到子树。当根节点是向左交叉遍历而来,子树想和根节点组成路径就只能向右交叉(也就是只能到达右子树),当然也可以向左交叉,但此时左子树无法与根节点组成路径,左子树只能重新作为根节点继续向下遍历(向右交叉,路径为0);当根节点是向右交叉遍历而来,也是同理
  • 因为除了根节点以外其余节点都是某个节点的左子树或右子树,所以其只能由向左交叉或向右交叉而来。其作为左子树只能向左交叉,连接其根节点时要想继续向下遍历就只能向右交叉,如果想向左交叉就只能自己作为根节点,路径重置为0;其作为右子树时也是同理

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int longestZigZag(TreeNode root) {return dfs(root, true, 0) - 1;}public int dfs(TreeNode root, boolean isLeft, int depth) {if (root == null) {return depth;}int leftDepth = 0;int rightDepth = 0;if (isLeft) {// 当前为左,与上一个节点组成路径只能向右,当前节点作为根节点可以向左leftDepth = dfs(root.left, true, 1);rightDepth = dfs(root.right, false, depth + 1);} else {// 当前为右,与上一个节点组成路径只能向左,当前节点作为根节点可以向右leftDepth = dfs(root.left, true, depth + 1);rightDepth = dfs(root.right, false, 1);}return Math.max(leftDepth, rightDepth);}
}

关键点

  • 深度优先遍历的思想

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/2141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<计算机网络自顶向下> 面向连接的传输:TCP

目录 TCP: 概述 TCP报文段结构 TCP往返延时(RTT)和超时 可靠数据传输 快速重传 流量控制 连接管理 TCP: 概述 点对点 一个发送方,一个接收方可靠的、按顺序的字节流 不出错,不重复,不丢失,不失序没有报…

C++学习笔记(17)——list迭代器

系列文章 http://t.csdnimg.cn/u80hL 目录 系列文章[TOC](目录) 定义功能 优点缺点函数成员函数insert: 在pos位置插入value(头部和中间插入效率很高)erase:删除指定位置的节点,返回被删除的节点的下一个位置swap:交换两个链表的…

如何在Java中计算两个日期之间的天数差

在Java开发过程中,我们常常需要处理与日期相关的计算,例如计算两个特定日期之间相隔的天数。Java 8及其后续版本引入了强大的java.time包,提供了丰富的日期时间类和工具,使得这类操作变得简单且精准。本文将详细介绍如何使用java.…

面试算法准备:动态规划

这里写自定义目录标题 1 理论2 例题2.1 斐波那契数列(什么是重叠子问题)2.1.1 带备忘录的递归解法 2.2 零钱兑换(讲解最优子结构)2.3 最长递增子序列(讲解如何求解状态转移方程)2.4 俄罗斯套娃信封问题&…

【Android 开发】模拟器上的/storage/emulated/0 上创建目录

Android创建文件夹失败的原因及解决方法 在Android开发中,经常会遇到创建文件夹的需求,但有时候我们可能会遇到创建文件夹失败的情况。本文将介绍一些常见的原因,并提供相应的解决方法。 常见原因 1.权限问题 Android系统对于文件系统的访…

3月养颜抗氧化市场发展趋势洞察:抗糖亮肤功能性产品成为行业大势

随着我国人口老龄化程度的加深和人们对健康和美丽的追求日益增强,具备养颜抗氧化、抗衰老功能的产品逐渐成为市场热门,备受人们关注。 根据鲸参谋数据显示,今年3月份,在线上电商平台(京东天猫淘宝)养颜抗氧…

pcba方案开发——血氧仪方案设计

1、方案概述:血氧饱和度(SpO2)是血液中携带氧分子的氧合血红蛋白(HbO2)的容量占全部血红蛋白(Hb)容量的百分比,即血液中血氧的浓度,是呼吸循环系统的重要生理参数。 血氧被称为心率、血压、体温、呼吸率之后的第五大人…

[Windows] Bypass分流抢票 v1.16.25 五一黄金周自动抢票软件(2024.02.08更新)

五一黄金周要来了,火车票难买到,即便官网候选订票也要看运气,推荐使用这个靠谱的自动抢票软件, 该工具是目前市面上最好用口碑最好的电脑抢票软件,从13年到现在,作者依旧在更新,可以自动识别123…

什么是最优物理隔离文件导出导入解决方案,来看看吧

企业进行物理隔离的主要原因是为了提高安全性,减少安全风险。物理隔离通常指的是将网络或系统中的关键部分与外界断开直接连接,以增强安全性。在企业环境中,这通常意味着将内部网络(内网)与外部网络(如互联…

关于MCU核心板的一些常见问题

BGA植球与焊接(多涂焊油): 【BGA芯片是真麻烦,主要是植锡珠太麻烦了,拆一次就得重新植】https://www.bilibili.com/video/BV1vW4y1w7oNvd_source3cc3c07b09206097d0d8b0aefdf07958 / NC电容一般有两种含义&#xff1…

控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包

目录 前言 基础知识 进阶实践 ANSI参数 ANSI类 JSLog类 工具的使用说明 配置相关 全局配置项 默认配置 基本用法 打印字符 添加全局配置项 清空所有样式及操作行为 校验传入的参数是否正确 样式控制 Node环境 浏览器中 光标控制指令 光标位置偏移 滚动条控…

python之super

子类在继承父类的时候,一般都会在初始化函数中调用父类的__init__函数,举个例子: class Parent:def __init__(self):print("This is Parent class.")class Child(Parent):def __init__(self):super().__init__()print("This …

XiaodiSec day031 Learn Note 小迪安全学习笔记

XiaodiSec day031 Learn Note 小迪安全学习笔记 记录得比较凌乱,不尽详细 day31 上传漏洞 前置 基础内容在 ctfshow 中演示 中间件 cms 中的文件上传 开始 文件上传一般配合抓包 前台验证, 在前台改就可上传成功 php 后缀的文件有 php 后门,可连…

消费增值:革新你的消费体验,让每一分钱都更有价值

亲爱的顾客们,你们好!今天,我想为大家介绍一种革新性的消费模式——消费增值,它赋予每一次购物以额外的价值,让消费过程变得更加丰富多彩。 过去,我们的消费观念往往是“一手交钱,一手交货”&am…

LCD彩屏显示方案选型攻略:从接口到GUI开发工具的全面评估

在现代人类社会,彩色显示技术是科技王国里最为绚丽夺目的技术奇葩,LCD彩屏通过显示实时信息并提供交互式的体验,将信息时代打扮得多姿多彩。无论是智能家电还是医疗健康设备领域,精美直观的LCD彩屏显示,往往能够为用户…

【Linux学习】初始冯诺漫体系结构

文章目录 认识冯诺依曼系统 认识冯诺依曼系统 什么是冯诺依曼体系结构? 冯诺依曼体系结构是一种将程序指令和数据以二进制形式存放在主存储器中,由中央处理器统一控制和执行的计算机系统结构。冯诺依曼体系结构实现了程序的可编程性和硬件与软件的分离&…

wordpress建网站主题案例推荐

wordpress企业网站主题案例 https://www.mymoban.com/wordpress/ wordpress公司官网主题案例 https://www.wowsoho.com/jianzhan wordpress外贸主题案例 https://www.wpniu.com/moban

用户中心 -- 插件使用 插件使用思路

易错注意点 1 5.1启动类 & 入口类 需保持一致 网址: 第一节课,用户管理--后端初始化,项目调通。二次翻工2-CSDN博客 一、 用户管理 框架 网址: 用户管理 --汇总 -- 明细-CSDN博客 1.2 更改路径,并生效 网址…

基于SpringBoot的“家具销售电商平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家具销售电商平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 管理员登录界面 管理员功能界面 家具分类管理…

【c语言】gcc编译动态库静态库和使用说明

(1)linux和win下库后缀名 在WIN上封装为.dll(动),.lib(静)。 在LINUX上封装为.so(动),.a(静) (2)动态库的封…