面试经典(19)--求二叉树中节点的最大距离

2023-11-15

题目描述:写一个程序求二叉树中相距最远的两个节点之间的距离。图3-11 A和B即为所求距离最远的两个节点。

      

我们先作图,看能否找到规律


我们可以看到,所求的两个节点可能经过二叉树的根结点,也可能不经过二叉树的根结点。每个节点维护左右子树最大距离(叶子到当前根节点的最大距离),左子树的最大距离:max1,右子树最大距离:max2,另设所求的二叉树两个节点的最大距离是nMaxLen。如果max1+max2>nMaxLen,需要更新nMaxLen=max1+max2,遍历完整棵二叉树,我们得到nMaxLen。

代码如下:

struct NODE
{
	NODE *pLeft;
	NODE *pRight;
	int nMaxLeft;
	int nMaxRight;
	char data;
};

int nMaxLen=0;

void FindMaxLen(NODE *pRoot)
{
	if(pRoot==NULL)
		return;
	if(pRoot->pLeft==NULL)
		pRoot->nMaxLeft=0;

	if(pRoot->pRight==NULL)
		pRoot->nMaxRight=0;

	if(pRoot->pLeft)//判定条件可省略,不影响结果,但明显不大好,因为我们对pRoot->pLeft==NULL情况已做了处理
		FindMaxLen(pRoot->pLeft);
	if(pRoot->pRight)
		FindMaxLen(pRoot->pRight);

	if(pRoot->pLeft!=NULL)//注意()一定要加上
		pRoot->nMaxLeft=1+(pRoot->pLeft->nMaxLeft>pRoot->pLeft->nMaxRight?pRoot->pLeft->nMaxLeft:pRoot->pLeft->nMaxRight);
	if(pRoot->pRight!=NULL)
		pRoot->nMaxRight=1+(pRoot->pRight->nMaxLeft>pRoot->pRight->nMaxRight?pRoot->pRight->nMaxLeft:pRoot->pRight->nMaxRight);

	//更新nMaxLen
	if(nMaxLen<pRoot->nMaxLeft+pRoot->nMaxRight)
		nMaxLen=pRoot->nMaxLeft+pRoot->nMaxRight;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试经典(19)--求二叉树中节点的最大距离 的相关文章

  • air硬盘扩容 macbook_「技巧」苹果电脑硬盘拓展的5种方法,你知道吗

    前言 这是官网最新的MacBook Pro 13 提供的前两种配置 9999元起售 差价1500元 一样的外观 一样的处理器和内存 除了硬盘容量之外 其他配置全部相同 为了128G的容量多花1500元钱 值得吗 从成本上来说 是不值得的 同
  • 欧拉角与四元数

    以下文章摘自wiki百科 对于在三维空间里的一个参考系 任何坐标系的取向 都可以用三个欧拉角来表现 参考系又称为全局坐标系 是静止不动的 而局部坐标系则固定于刚体 随着刚体的旋转而旋转 参閲右图 设定 x y z轴为全局坐标系的参考轴 称
  • 软件程序流程图使用规范

    软件程序流程图使用规范 Amorphous 博客园 cnblogs com 目录 一 程序流程图的作用 二 画流程图常用软件 三 流程图中使用的符号 四 流程图采用的常用符号 五 循环流程图的画法 六 程序流程图的高级用法 七 基本结构 八
  • 算法训练day43

    文章目录 1049 最后一块石头的重量 II 求最大重量 思路分析 代码实现 494 目标和 求组合方法数 思路分析 动规方法 代码实现 总结思考 474 一和零 求二维背包的最大物品数 思路分析 代码实现 思考总结 1049 最后一块石头
  • springmvc / /* /img/**等问题

    在配置springmvc的前端控制器 DispatcherServlet的时候有三种配置方式 action 访问以 action结尾 由DispatcherServlet进行解析 第二种 所以访问的地址都由DispatcherServlet
  • 用Vmware和vm tools虚拟机装Linux Ubuntu16 配置anaconda python3环境 安装tensorflow/tflearn

    Authoried by Monana Contact me via hemonan vip 163 com 本教程适合虚拟机 也适合不用虚拟机直接用Linux系统的 0 安装前的准备答疑 1 很多人都会有疑问 我到底在虚拟机里装linux

随机推荐

  • filebeat 解析日志 并发送到Elasticsearch

    起先 是出于了解我的网站逐步前行STEP的访问情况而做一个Nginx日志统计分析的功能 首选的就是ELK 但是 由于Logstash占用内存和CPU占有率都不是我的小服务器能承受的 转而将logstash换成filebeat 因为fileb
  • 【计算机视觉

    文章目录 一 前言 二 试玩效果 三 研究背景 四 模型结构 五 Pre training objectives 六 CapFilt架构 七 Experiment 八 结论 一 前言 今天我们要介绍的论文是 BLIP 论文全名为 Boots
  • live555 实现一个最简单的RTSP服务器

    用live555中的库写了一个最简单的RTSPServer程序 仅用于学习目的 从下例的代码中 可以清析的明白RTSPServer的函数调用流程 cpp view plaincopyprint include
  • 人工智能期末复习

    1 人工智能 内涵和外延 英文 Artificial Intelligence 定义 能力方面 人工智能就是用人工的方法在机器 计算机 上实现的智能 或称机器智能 学科方面 是一门研究如何构造智能机器或智能系统 以模拟 延申和扩展人类智能的
  • 微信JSAPI支付v3流程(uniapp和node版)

    一 微信JSAPI支付 请提前准备好接入前的准备文档获取相关的配置数据 否则下面需要的数据你可能会比较懵 并且需要提前了解微信JSAPI支付文档 二 获取用户openid 获取openid方法例子 三 h5调起支付 1 第一种通过Weixi
  • springboot yml 配置文件注入Map,List

    文章转自 https blog csdn net sdzhangshulong article details 80124900 person lastName hello age 18 boss false birth 2017 12 1
  • C语言学习之extern关键字

    1 了解extern 1 extern是C语言的一个关键字 可以用来修饰函数与变量 2 当extern修饰一个变量或函数时时 就是在声明这个变量 函数 告诉编译器在外部文件中已经这个变量 函数 要通过编译 2 extern的用法 1 在一个
  • 使用java实现word转pdf,亲测有效,完美保留样式

    网上了很多方法 要么转换速度慢 要么转换出来的格式不一样 遇到了各种问题 无法完美完成转换 在stackoverflow发现完美答案 依赖
  • 网易严选滑块

    疫情分控在家 哎 难搞哦 大表哥们 虽然是网易一家的滑块 就当无聊分享一下 说明一下 有些id用官方的那套可能过不去 文章末尾分享一个ast解混淆的js 大家可以拿去用过用 之前的文章有写过网易的 也是简单介绍了一下 严选滑块 先看看b d
  • webpack系列 —— 性能优化篇

    一 压缩图片和css 压缩图片 image webpack loader 来压缩图片文件 image webpack loader 使用 imagemin 来进行压缩 use file loader 需要在file loader之后添加 i
  • Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

    SDIO Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块 内置无线网络协议IEEE802 11协议栈以及TCP IP协议栈 能够实现用户主平台数据通过SDIO口到无线网络之间的转换 SDIO具有传输数据快 兼容SD M
  • Jupyter Notebook 更改默认存储路径、更改默认浏览器、添加虚拟环境的kernel

    文章目录 1 更改默认存储路径 1 1 修改配置文件 1 2 修改快捷方式 2 更改默认浏览器 3 添加虚拟环境的kernel 1 更改默认存储路径 1 1 修改配置文件 Jupyter Notebook 的默认存储路径是 C Users
  • 计算机二级12月报名时间广东,18年广东省全国计算机等级考试报名:12月15日起...

    全国计算机等级考试 National Computer Rank Examination 简称NCRE 是由教育部考试中心主办 面向社会 用于考查应试人员计算机应用知识和能力的全国性计算机水平考试体系 一 考试时间及考试体系 一 考试时间
  • 【C语言】自动售货机

    题目 假设一种自动售货机可以为顾客提供 3 种价格档次的不同饮料 投入2元钱 可选择康师傅矿泉水 怡宝矿泉水和农夫山泉之一 投入 3 元钱 可选择可乐 雪碧和果汁之一 投入 5 元钱 可选择奶茶 咖啡和酸奶之一 编写程序 模拟用户向自动售货
  • hcl在服务器上保存文件,HCL File Extension - What is .hcl and how to open? - ReviverSoft

    You re here because you have a file that has a file extension ending in hcl Files with the file extension hcl can only b
  • @Mapper注解中如何使用Mybatis的<if>标签

    以 Update为例子
  • 图像分类、目标检测、图像分割区别

    1 图像分类 图像分类主要是基于图像的内容对图像进行标记 通常会有一组固定的标签 而你的模型必须预测出最适合图像的标签 这个问题对于机器来说相当困难的 因为它看到的只是图像中的一组数字流 上图片来自于Google Images 而且 世界各
  • jquery的$().each,$.each的区别

    在jquery中 遍历对象和数组 经常会用到 each和 each 两个方法 两个方法是有区别的 从而这两个方法在针对不同的操作上 显示了各自的特点 each 对于这个方法 在dom处理上面用的较多 如果页面有多个input标签类型为che
  • 图机器学习课程笔记6

    维生素C吃多了会上火 个人CSDN博文目录 cs224w 图机器学习 2021冬季课程学习笔记集合 目录 1 思维大纲 2 中文笔记 1 思维大纲 2 中文笔记
  • 面试经典(19)--求二叉树中节点的最大距离

    题目描述 写一个程序求二叉树中相距最远的两个节点之间的距离 图3 11 A和B即为所求距离最远的两个节点 我们先作图 看能否找到规律 我们可以看到 所求的两个节点可能经过二叉树的根结点 也可能不经过二叉树的根结点 每个节点维护左右子树最大距