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

编程之美 3.8 :求二叉树中节点最大的距离 题干 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。(P241) 我的解答 没看答案前我的想法就是收集所有的叶子节点,然后将计算每对叶子节点的距离,找出距离最大的。显然距离最大的两个节点必然在叶子节点,或者一个根节点、一个是叶子节点。为什么说显然,我想是从图中观察分析的出的吧 阅读详情

题目描述:写一个程序求二叉树中相距最远的两个节点之间的距离。图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;
}


编程计算二叉树中某结点的层数 题目:编写一个函数:实现在二叉树中查找与字符key内容相同的结点,并返回其在二叉树中的层数。如果二叉树中不存在该结点,则返回-1. #include "stdio.h" typedef struct BiTNode{     char data;   /*结点的数据域*/     struct BiTNode *lchild , *rchild;  /*指向左孩子和右孩子*/ } BiTNod... 阅读详情

相关推荐

面试算法——权值最大的叶节点到权值最小的叶节点的距离

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。 给定二叉树的根节点root,请返回所求距离。 复习一下关于树的相关知识,深度优先遍历(DFS)和广度优先遍历(BFS)等

hymanxq的专栏 3061

【编程题目】求二叉树中节点的最大距离

第 11 题(树)求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。   思路:二叉树结构中只设了左右子节点的指针。 设单个结点的深度为0。 用后序遍历,得到每个结点为根的子树的最大深度。maxdistance记录该结点(左子树深度+右子树深度 + 2)...

weixin_34138139的博客 210

求二叉树中最远的两个节点的距离

求二叉树中最远的两个节点的距离短短的代码中其实涉及到了三道题目: 利用已知序列递归的建一棵二叉树 递归的求一棵树的深度 求二叉树中距离最远的两个节点的距离:利用递归求树的深度的思想,在其中加入一个最大距离的引用的参数,利用了引用参数的特性,即可求得最大距离,比较简单,下面列出代码及图示; 给出两组测试用例的图示://代码实现#include<iostream> #include<cassert> u

John的博客 5480

面试题50:求二叉树中两个节点的最近公共祖先

在数据结构中,二叉树是一个比较复杂的数据结构。在面试的时候,很多面试官喜欢通过二叉树来考察一个程序猿的逻辑、代码等基本功。最近正好在看《剑指offer》,并且学习了二叉树的一些相关知识。在《剑指offer》的第50题,求二叉树中两个节点的最近公共祖先。

Monster_Girl 1206

求一个二叉树中两个结点的最大距离

首先说一下距离这个词,在二叉树中距离就是从一个节点到另一个结点的边的条数,为了更为清晰的描述这个概念,下面来看一张图:看上面的图,蓝色线表示的是结点4到6的距离,红色线表示的是从结点5到6的距离,从图中我们可以看到,不是所有的距离都经过根结点的,这一点很重要。那么怎么求最远距离呢?上面的那个图中,我们可以很容易看出最远的距离就是从4到6,或者是从4到5,都是一样的。而且我们还发现,他们分别是左子树的

jhcconan614的博客 3223

【数据结构】二叉树面试题总结

为了对二叉树的知识进行巩固,今天我们来解析5道二叉树的经典面试题。 这五道面试题如下: 求二叉树中最远两个结点的距离; 判断一棵树是否是完全二叉树; 由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5); 求二叉树两个结点的最近公共祖先; 将二叉搜索树转化成有序的双向链表;现在我们来对这五道题进行分析: 求二叉树中最远的两个节点之间的距离这

leap的博客 2893

Java面试总结_二叉树结点最大距离

package com.binarytree.realize; //最大距离=左子树到根节点最大距离+右子树到根节点最大距离 //结点距离指两个结点之间边的个数 class NodeNew{ public int data; public NodeNew left=null; public NodeNew right=null; public int leftMaxDistance; ...

hxl0925的博客 672

二叉树求最大最小权值问题的面试题

有一棵二叉树,树上每个点标有权值,权值各不相同,给定二叉树的根节点为root,请找出权值最大的节点与权值最小的节点; 思路解析

Allisonton的博客 6331

c++实现二叉树中节点的最大距离

文章前半部分能懂,可是后面的Milo不是很理解,可能有待以后学习..... 微软面试题之一,难度系数中,题目描述如下: 求二叉树中节点的最大距离...  如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,  我们姑且定义"距离"为两节点之间边的个数。  写一个程序,  求一棵二叉树中相距最远的两个节点之间的距离。    逻辑分析: 1、看到这道题的时候,很容易产生一

ghevinn欢迎您光临 2609

二叉树经典面试题

求二叉树中最远的两个节点的距离,对于这样一个题经过画图分析总体来说有一下几种情况: 分析:我们可以考虑递归算法,进行后续遍历的同时,将每一个节点左右子树的距离通过传引用的方式将其带回,如果当前节点的左右子树距离大于前一节点的左右子树距离,那么就更新这个distance. 代码实现: template struct BinaryTreeNode { Binar

qq_29503203的博客 1114

二叉树的五道面试题

1、判断一棵树是否是完全二叉树; 2、求二叉树中最远两个结点的距离; 3、由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5); 4、求二叉树两个结点的最近公共祖先; 5、将二叉搜索树转化成有序的双向链表; 判断一棵树是否是完全二叉树 要想判断一颗树是否是完全二叉树,你得先知道什么是完全二叉树。 完全二

LLZK_的博客 6407

求一个二叉树中任意两个节点间的最大距离

39. 网易有道笔试: (1).求一个二叉树中任意两个节点间的最大距离, 两个节点的距离的定义是这两个节点间边的个数, 比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2, 优化时间空间复杂度。 题目来源: 微软等公司数据结构+算法面试100 题V0.

xshbx的专栏 6565

飞书应用开发脚手架lark-harness:从零构建企业级机器人

在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes

weixin_30703911的博客 612

java 树最大距离_zz求二叉树中节点的最大距离

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。如图 3-11 所示,粗箭头的边表示最长距离:图 3-11树中相距最远的两个节点 A,B写书评,赢取《编程之美——微软技术面试心得》www.ieee.org.cn/BCZM.asp分析与解法我们先画几个不同形状的二叉树,(如图 3-12 所示...

weixin_39556853的博客 260

Spring AI实现RAG(检索增强生成)详解与实践

支持多种文件格式的文档加载实现高效的向量存储和检索构建智能的问答系统提供可追溯的知识服务RAG技术为AI应用提供了强大的知识增强能力,使得模型能够基于实际文档生成准确、可靠的回答。

beiduofen2011的专栏 1238

OmniDrive(2):环境搭建

项目中使用的是全量的数据集(full dataset v1.0), 数据量比较大,训练验证(trainval) + test 总计200多G的数据,单独一个个下载会比较慢。参数,否则安装的时候会自动卸载已安装好的torch,重新安装最新版本的torch,这是不允许的。在cuDNN官网下载,默认下载的是最新版本的cuDNN,我们这里点击。,== 博文中详细介绍了完整的cuda和cudnn的安装过程==分析: 这是因为yapf 安装的版本不对,需要安装特定的版本。出现训练的loss变化,就说明可以正常训练了。

@bangbang的博客 623

【每日面试题】求一个二叉树中任意两个节点间的最大距离

)求一个二叉树中任意两个节点间的最大距离, 两个节点的距离的定义是这两个节点间边的个数, 比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2, 优化时间空间复杂度。 代码: void MaxDistance(Tree* root,int &deep,int & maxdis) {   if(root)   {    deep=0;    maxdis=0;

qunqin的专栏 5097

鸿蒙接入微信支付 微信H5网页在鸿蒙系统的适配方法(含支付兼容方案) 微信H5适配鸿蒙系统 | ArkWeb识别 | 鸿蒙浏览器UA | 微信支付鸿蒙适配 | 鸿蒙微信判断方式

微信H5网页鸿蒙系统适配指南 针对微信H5网页在鸿蒙系统出现的兼容问题,本文提供完整适配方案。关键点包括: 环境识别:

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1300

java面试题:如何求二叉树中节点的最大距离+层序遍历

问题描述:求二叉树中距离最远的两个 节点之间的距离。。 class Node{ public int data; public Node left; public Node right; public int leftMaxDistance; public int rightMaxDistance; public Node(int data){ this.data=data;

潇潇子卿的博客 756

基于Simulink的异步电机参数在线辨识与自适应控制仿真

本文基于Simulink平台,详细介绍了异步电机参数在线辨识与自适应控制系统的仿真实现。针对异步电机运行中参数时变问题,采用模型参考自适应系统(MRAS)实时辨识转子电阻和互感,并结合自适应PI控制策略动态调整控制器参数。通过搭建完整的矢量控制(FOC)仿真模型,验证了系统在稳态辨识、参数摄动和动态响应等工况下的性能:参数辨识误差<1.2%,转速跟踪误差<20rpm,动态响应时间<10ms。文章还提供了详细的Simulink建模步骤、核心代码实现及性能分析,为高级电机控制系统的设计与优化提

amy_mhd的博客 72

如何懂固高卡以及滚筒轴+平移轴配合运动?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 843

二叉树中节点的最大距离

微软面试题之一,难度系数中,题目描述如下: 求二叉树中节点的最大距离...  如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,  我们姑且定义"距离"为两节点之间边的个数。  写一个程序,  求一棵二叉树中相距最远的两个节点之间的距离。    逻辑分析: 1、看到这道题的时候,很容易产生一种错觉,这题不就是求二叉树高度吗。。。显然,出题人不是小白,所以这里面一定有文

pediy_yuhan的专栏 8570

第三章-python基础语法

有C语言基础应该这样学 Python。

qq_46187594的博客 1175

c++实现二叉树中节点的最大距离 - c++语言程序开发技术文章,c++实现二叉树中节点的最大距离...

文章前半部分能懂,可是后面的Milo不是很理解,可能有待以后学习.....微软面试题之一,难度系数中,题目描述如下:求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。逻辑分析:1、看到这道题的时候,很容易产生一种错觉,这题不就是求二叉树高度吗。。。显然,出题人不...

weixin_34308696的博客 433

GhidraMCP:AI驱动的逆向工程革命——让LLM自主操作Ghidra进行自动化分析

(Ghidra Machine Control Protocol)应运而生,它通过将LLM与Ghidra(美国NSA开源逆向工具)结合,实现了AI驱动的自动化逆向工程流程。逆向工程是软件安全、漏洞分析和代码审计的核心环节,但传统方法依赖人工分析,耗时且易出错。未来,随着LLM技术的演进和逆向工程工具的优化,GhidraMCP有望成为安全研究人员和开发者的核心工具,推动逆向工程进入“AI辅助时代”。GhidraMCP通过LLM与Ghidra的深度整合,重新定义了逆向工程的自动化边界。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2114

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

下一篇: 面试经典(18)--重建二叉树
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值