二叉树中节点的最大距离

问题 E: DS二叉树—二叉树结点的最大距离 题目描述 二叉树两个结点的距离是一个结点经过双亲结点,祖先结点等中间结点到达另一个结点经过的分支数。二叉树结点的最大距离是所有结点间距离的最大值。例如,下图所示二叉树结点最大距离是3,C和D的距离。 二叉树用先序遍历顺序创建,#表示空树。计算二叉树结点最大距离和最大距离的两个结点(假设二叉树中取最大距离的两个结点唯一)。 输入 测试次数T 第2行之后的T行,每行为一棵二叉树先序遍历结果(#表示空树) 输出 对每棵二叉树,输出树的结点最大距离和最大距离... 阅读详情

二叉树也是一个图,虽然在一般的图中求解简单最长路径问题非常困难,但是在二叉树中却比较简单!我们甚至可以在线性时间内解决问题!

二叉树中距离最长的两个节点一定是叶子节点或根节点,假设有一个节点不是叶子节点或根节点,那么其父亲或者其儿子到另外一个节点的距离比最大距离要大,所以假设错误。如果距离最长的两个节点有一个是根,那么最长距离就等于树的高,而且根只有一个儿子,否则一定存在更长的距离。对于某一个节点,设其左儿子和右儿子的高度分别为ha和hb,如果其两个儿子没有距离大于ha+hb的路径,那么ha+hb就是以这个节点为根的树的最长距离。如果maxlen(i)表示以节点i为根的树的最大距离,那么maxlen(i) = max(max(maxlen(i的左子树),maxlen(i的右子树)),i左儿子的高度+i右儿子的高度)。

#include <iostream>
#include <string>
using namespace std;

struct tree {
	int value;
	int maxlen;
	int height;
	struct tree *lchild;
	struct tree *rchild;
};

struct tree *gen(int v)
{
	struct tree *root = new struct tree;
	root->value = v;
	root->maxlen = 0;
	root->height = 0;
	root->lchild = 0;
	root->rchild = 0;
}

size_t maxlen(struct tree *root)
{
	if (root) {
		size_t lhi = 0, rhi = 0, llen = 0, rlen = 0;
		maxlen(root->lchild);
		maxlen(root->rchild);
		if (root->lchild) {
			lhi = root->lchild->height;
			llen = root->lchild->maxlen;
		}
		if (root->rchild) {
			rhi = root->rchild->height;
			rlen = root->rchild->maxlen;
		}
		root->height = max(lhi, rhi) + 1;
		root->maxlen = max(max(llen, rlen), lhi + rhi);
		return root->maxlen;
	}
	return 0;
}

struct tree *rebuild_fm(string f, string m)
{
	if (f.length() > 0 && f.length() == m.length()) {
		size_t pos = m.find(f[0]);
		if (pos != string::npos) {
			string ff, mm;
			struct tree *root = new struct tree;
			root->value = m[pos];
			root->maxlen = 0;
			root->height = 0;
			ff = f.substr(1, pos);
			mm = m.substr(0, pos);
			root->lchild = rebuild_fm(ff, mm);
			ff = f.substr(pos+1, f.length()-pos-1);
			mm = m.substr(pos+1, m.length()-pos-1);
			root->rchild = rebuild_fm(ff, mm);
			return root;
		}
	}
	return 0;
}

int main()
{
	struct tree *root = rebuild_fm(
		"abdhcmrswyinotxzecfgjpquvk",
		"chrmywsdnioxztbeafcpjuqvgk"
		);
	cout << maxlen(root) << endl;
}


23.二叉树-求树节点间的最大距离 问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。书上的解法书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。计算一个二叉树的最大距离有两个情况:·        情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。·        情况B: 路径不穿过根节... 阅读详情

相关推荐

二叉树的任意两节点间的最大距离

1.问题定义 如果我们把二叉树看成一个图,父子结点之间的连线看成是双向的,我们姑且定义“距离”为两节点之间边的个数。 写一个程序求一棵二叉树中相距最远的两个结点之间的距离 2.解法 计算一个二叉树的最大距离无外乎两种情况: A. 路径经过左子树的最深结点,再通过根节点,最后到右子树的最深结点。 B. 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其最大者。 s

patkritLee的博客 5410

DS二叉树—二叉树结点的最大距离

二叉树两个结点的距离是一个结点经过双亲结点,祖先结点等中间结点到达另一个结点经过的分支数。二叉树结点的最大距离是。如果有多个解,输出字典序最小的解(即第一个结点字母更小的,如果第一个字母相同,输出第二个结点字母更小的)。对每棵二叉树,输出树的结点最大距离和最大距离的结点,输出格式见样例。例如,下图所示二叉树结点最大距离是3,C和D的距离。第2行之后的T行,每行为一棵二叉树先序遍历结果(计算二叉树结点最大距离和最大距离的两个结点。距离的计算可以在每颗树中打上。所有结点间距离的最大值。

Jenlibein的博客 1036

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

求一个二叉树中任意两个节点间的最大距离, 两个节点的距离的定义是这两个节点间边的个数, 比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复 杂度。   思路:1.对二叉树中的任一个节点,求得它到左子树中最深的结点的距离ldis,再求得它到右

cxh342968816的专栏 7114

二叉树中节点的最大的距离

问题定义 把二叉树看成一个图,父子节点之间的连线看成是双向的,定义“距离”为两个节点之间的边数。例如下图中最大距离为红线的条数为6. 分析 方法一、 typedef struct Node { struct Node *pleft; //左孩子 struct Node *pright; //右孩子

Smile&搁浅 5559

【结构之法】二叉树中节点的最大距离

前言:编程之美中的解法并不是最好的,所以这里给出大神的解法。问题:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 思路计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。 情况B: 路径不穿过根节点,而是左子树或右子树的最大距离路径,

奔跑的小河 720

OpenVINS实战指南:从环境搭建到RGB-D相机实时建图

本文提供了一份详细的OpenVINS实战指南,涵盖从Ubuntu与ROS环境搭建、依赖安装与编译调试,到连接RGB-D相机进行实时建图的完整流程。重点解决了RealSense D435i等设备的驱动配置、话题对齐及常见问题,并分享了传感器标定与性能优化技巧,帮助开发者快速实现稳定高效的视觉惯性里程计系统。

weixin_29201313的博客 482

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

二叉树节点的结构体定义如下: struct BTreeNode {  ElemType elem;  // 当前节点元素  BTreeNode *left; // 左孩子结点  BTreeNode *right; // 右孩子节点  int maxLeft;  //

tangbo1987的专栏 890

PINN内嵌物理知识神经网络入门及文献总结

内嵌物理知识深度学习方法(PINN)已经成功用于解决各类科学计算问题,其本质是将物理先验知识嵌入神经网络训练中,将一个求解PDE的问题转化为一个优化问题。这篇博客主要记录PINN相关论文

山里娃的博客 7万+

二叉树节点间的最大距离

问题:   从二叉树节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫做A到B的距离。 基本思路: 一个以h为头的树上,最大的距离只可能来自以下三种情况: h左子树上的最大距离 h右子树上的最大距离 h左子树上离h.left最远的距离+1+h右子树上离h.right最远的距离 三个值中的最大值就是整棵h树中最远的距离 def maxDistan...

BUPT-WT的博客 772

UDS $27服务DLL文件生成

UDS 27算法 DLL文件生成

hkj8808的博客 1282

Dify如何实现自主学习

摘要:Dify通过构建感知-决策-执行-反馈的闭环实现"自主学习",本质是打造能自动获取信息、更新知识库并调整策略的Agent工作流。核心包括:1)建立知识库作为记忆体;2)搭建感知与执行工具获取实时信息;3)通过工作流编排决策"大脑",包含LLM决策节点、行动执行节点和反馈反思节点。典型应用如根据用户反馈优化回答风格,通过存储反思日志到知识库实现持续优化。这种机制使智能体能基于新数据和经验不断自我改进。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 725

【二叉树】求二叉树上节点间的最大距离

题目 从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500. 思路 如中节点4和节点2之间的距离为2,节点2和5之间的距离为3. 设二叉树的头节点为head,这棵树的节点间最大距离可从以下三种情况中...

gulaixiangjuejue的博客 919

第四章节 Qt字符串QString详解

QString 的使用方式和 C++标准库的 std::string 字符串的非常相似。

m0_65635427的博客 889

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

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

ghevinn欢迎您光临 2609

ImportError: DLL load failed while importing _pydantic_core: 找不到指定的程序对应解决方案

本文主要介绍了ImportError: DLL load failed while importing _pydantic_core: 找不到指定的程序对应解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 19万+

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5921

二叉树节点间的最大距离问题

import java.util.Stack; // 我的思想路是,无论这个距离有多长,由于是二叉树,最大距离必产生在该树的某一个节点上 // 对所有节点的左右子树计算后,相加再加一,找出最大值 public class Finder{ public static Stack<Node> stack = new Stack<>(); ...

bo_Wen_h的博客 329

【GameFramework框架】二、GameFramework框架介绍

Game Framework框架是由E大(Ellan Jiang)开源的一款基于Unity的通用游戏框架。Game Framework框架提供了游戏开发中常用的框架基础模块,将基础模型进行了封装,在资源管理和资源更新方面比较完善,可以大大加大开发进程,加快开发速度,并且还在在此此处上保证产品质量。实在是代码开发、框架学习、编程进阶、居家旅行哦不对,是提升自己的最佳实践。Game Framework框架。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5843

二叉树问题—二叉树节点间的最大距离

二叉树问题—二叉树节点间的最大距离 题目描述 从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路径上的节点数叫作 A 到 B 的距离。现在给出一棵二叉树,求整棵树上每对节点之间的最大距离。例如下图二叉树的节点间最大距离为节点5到节点7的距离为5。 思路如下 一个以h为根节点的树上,最大的距离只可能来自以下三种情况: 1)h左子树上的最大距离 2)h右子...

小白一枚,共同交流,共同进步~ 1230

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度 这是论坛上的一道算法题,我目前想到的解法是: 二叉树中任意两个节点间的最大距离,那么其中一个节点必定是层次最深的一个节点,记该节点为A。该二叉树中层次最深的节点可能有多个,但只需要选择其中一个记为A。找出了A,那么遍历二叉树中其它非A的节点,访问各节点的时候求出该节点到A的距离,从而记录下求到的最大距离。 因此题目可以转化为:求一个二

The power of C, the secret of MD 2989

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

关于二叉树,建立、遍历、求节点最大距离

今天做了一题求二叉树节点的最大距离,顺便写了下二叉树的建立,遍历的过程。  我觉得这题的主要思想是深度遍历+动态规划,我们在深度遍历的过程中,对于某一个子树,求出左右子树叶子节点到根节点的最大距离,进而求出经过根节点的最大距离。 最后求出所有子树经过根节点的最大距离。就是这个题目的最终结果。代码如下:  //二叉树的建立,以及遍历 //16 14 8 2 -1 -1 4 -1 -1 7 1 -

King__Moving的专栏 803

算法-二叉树两个叶节点最大距离

1. 二叉树中两个子节点相距最大距离 获取二叉树中两个子节点相距最大距离,其实可转换为二叉树两子树高度之和最大的问题 /** * Note:根节点两子树高度之和并不一定等于两个子节点相距最大距离,存在相距最远的两子节点在根节点同一子树下的情况,故需变量 max 记录该值 * a ...

谈谈1974 1190
上一篇: 单链表节点删除问题
下一篇: 变参函数剖析
notishell
博客等级 码龄15年 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值