二叉树两节点的最短距离(一次dfs完成)

2023-11-18

字节面试问到的,leetcode上没看到,记录一下自己的做法

此题近似于leetcode 236.二叉树的最近公共祖先,但有较大不同

做法为:对二叉树进行dfs遍历,递归函数写法为func dfs(root,p,q *TreeNode,ans *int) int,

其中root为当前遍历的节点,p,q为要求的两个节点,ans是答案的指针,返回int值

总体思想为利用返回值表征两个节点中的一个是否出现过,并记录距当层的高度,若根节点、左子树、右子树中的二者同时出现p,q则更新答案

分多种情况讨论:

  1. root==nil,遍历到空节点,返回0
  2. root!=nil时,分情况讨论
    1. 先遍历左右子节点,返回值记为left,right
    2. 若当前root是p,q中的一个
      1. 判断左右子树中是否有另一个节点(left!=0或right!=0),如果有,则直接更新答案,返回
      2. 否则返回1,告诉上层节点自己出现过并记录相差的高度
    3. root不是p,q中的一个
      1. 若left,right均不为0,代表左右子树都出现过p,q,则更新答案为left+right,返回
      2. 若均为0,则p,q不在当前树中,返回0
      3. 剩下的情况是left,right中有1个不为0且自己(root)不是另一个,则向上传递left+1或right+1(非0的那个+1)记录相差的高度,这样一直向上传递到p,q中另一个节点或者传到p,q的最
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树两节点的最短距离(一次dfs完成) 的相关文章

随机推荐

  • Nacos-Server用户权限控制无效解决方案

    场景 nacos server默认账户是 nacos nacos 此用户权限太大 有时候为了安全起见会建立多个用户 给予不同的角色权限 但建立用户后发现权限不起作用 分析 nacos默认不开启权限控制 如果想使用权限控制功能 需要在 con
  • etp服务器怎么连接共享文件夹,Everything共享文件操作方法

    以前我们要想共享一些文件给朋友 最常见的方法就是通过网盘来完成 但是这样的共享并不是朋友们都喜欢的 其实利用著名的搜索工具Everything 我们就可以在电脑中划出一部分区域 从而快速搭建一个用于分享的服务器平台 这样我们可以将自己发现的
  • visual studio code怎么用root/sudo调试远程程序?

    vs code是款微软出品不错的编辑器 可以远程编辑 处理服务器上的文件 支持c php python java等各种语言 在调试c 程序 的时候遇到了一个问题 编辑代码是用的普通用户 但调试的时候需要用root启动 如果启动调试出现要求密
  • Python 安装模块后找不到模块以及Python代码自动补全设置的一个思路

    起因是在做一些小玩意时安装了一些模块 但是运行时却找不到模块 于是多次重装VScode里边的Python部分 导致VScode自动补全也被玩掉了 查了很久的才终于搞回来 先把找到的一个有用链接放这 免得找不到了如何使用Visual Stud
  • 使用labelme打标签,详细教程

    做图像语义分割 打标签时需要用到labelme这个工具 我总结了它的详细使用教程 目录 一 安装labelme工具 二 文件位置关系 三 labelme工具 四 labelme工具的快捷键 五 代码 将标签文件转为统一固定格式 六 总结 一
  • Jdk8 之 Stream流详细用法(一)

    本篇文章参考云深i不知处的文章 原文链接 https blog csdn net mu wind article details 109516995 一 概述 Stream 是 Java8 中处理集合的关键抽象概念 它可以指定你希望对集合进
  • 21.5 CSS 网页布局方式

    网页布局方式 网页布局方式 是指浏览器对网页中的元素进行排版的方法 常见的网页布局方式包括 1 标准流 文档流 普通流 布局 这是浏览器默认的排版方式 元素按照其在文档中的位置依次排列 可以使用CSS的盒模型属性进行水平和垂直布局 2 浮动
  • ipad投屏软件_无线投屏操作指南 轻松分享

    下发福利 智能会议的无线投屏 支持Windows Mac OS ios Android 一键投屏 随时批注 能够满足一分四屏 灵活进行大小屏互控 帮助企业突破 线 制 以下内容为无线投屏的操作指南 01 Windows 与 Mac OS系统
  • OOMMF手册整理

    如果您得系统Tcl Tk安装就是非线程得 那么您可以创建一个非线程版本得OOMMF 否则您可以在您得主目录或 usr local下创建一个额外得 线程化得Tcl Tk安装 请注意 如果您得系统上安装了多个Tcl Tk安装 则无论何时您构建或
  • Springboot未注入的类使用Spring容器的实体类,实体类又需要插入yml的数据,实体类属于Spring容器。

    Springboot中Bean的注入 我们都知道 Springboot可以使用方法级别注解 Bean 和类级别注解 Controller Component Service等 加包扫描的方式注入Beans 实现交给Spring容器管理 这样
  • R各个包里面的数据集列表

    Package Item Title csv doc datasets AirPassengers Monthly Airline Passenger Numbers 1949 1960 CSV DOC datasets BJsales S
  • STM32串口中断接收方式详细比较

    本例程通过PC机的串口调试助手将数据发送至STM32 接收数据后将所接收的数据又发送至PC机 具体下面详谈 实例一 void USART1 IRQHandler u8 GetData u8 BackData if USART GetITSt
  • stata--异方差检验

    异方差检验有两种方法 1 残差图 2 white检验 1 残差图 一般不用这个 这个只是粗略 代码 reg y fdi rvfplot yline 0 rvpplot fdi yline 0 1 对y和fdi回归 2 画出残差与拟合值 y
  • Doc2Vec的简介及应用(gensim)

    作者 Gidi Shperber 在本文中 你将学习什么是doc2vec 它是如何构建的 它与word2vec有什么关系 你能用它做什么 并且没有复杂的数学公式 介绍 文本文档的量化表示在机器学习中是一项具有挑战性的任务 很多应用都需要将文
  • ajax实现文件上传

    没有使用插件 一 单文件上传
  • linux 命令:zip 详解

    zip 命令的功能是打包和压缩文件 用法 zip options b path t mmddyyyy n suffixes zipfile list xi list 如果 zipfile 未提供 压缩标准输入并把结果写到标准输出 选项 A
  • svn项目的拉取和提交

    svn项目的拉取和提交 如何拉取svn项目到本地 方法一 1 新建一个空的svn目录文件夹 然后直接在桌面空白处鼠标右击 点击Svn Checkout 弹出一个框 URL of repository就是该项目得svn地址 Checkout
  • R语言的Rattle可视化BI数据挖掘分析工具

    Rattle介绍 Rattle是一个免费的开源数据挖掘工具包 使用 Gnome 图形界面以统计语言 R编写 它在GNU Linux Macintosh OS X和MS Windows下运行 Rattle正在澳大利亚和国际上用于商业 政府 研
  • @Cacheable 设置缓存过期时间

    RedisCacheConfig 文件 Configuration public class RedisCacheConfig 自定义的缓存key的生成策略 若想使用这个key 只需要讲注解上keyGenerator的值设置为simpleK
  • 二叉树两节点的最短距离(一次dfs完成)

    字节面试问到的 leetcode上没看到 记录一下自己的做法 此题近似于leetcode 236 二叉树的最近公共祖先 但有较大不同 做法为 对二叉树进行dfs遍历 递归函数写法为func dfs root p q TreeNode ans