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

该博客介绍了如何计算一棵二叉树中相距最远的两个节点之间的距离。通过分析,确定最远节点可能是两个叶子节点或一个叶子节点到根节点。提出动态规划的思路,自底向上解决子树问题,最终得出整棵树中最远节点距离的计算公式。
摘要由CSDN通过智能技术生成

题目

写一个程序求一棵二叉树中相距最远的两个节点之间的距离。

这里写图片描述

粗箭头的边表示最长距离。

分析:

相距最远的两个节点,一定是两个叶子节点,或者是一个叶子节点到它的根节点(单枝树)。

我们来考虑相距最远的两个节点是两个叶子节点的情况。

对于任意一个节点,以该节点为根,假设这个根有k个孩子节点,那么相距最远的两个节点U和V之间的路径与这个根节点的关系有两种情况。

1.若路径经过根节点,那么节点U和V属于两个不同的子树。那么就有U和V都是它们所在子树到根节点最远的节点。

2.若路径不经过根节点:

这里写图片描述

那么节点U和V一定属于根节点的k个子树之一。同时满足,它们是子树中相距最远的两个节点。

此时问题就能转化成在子树上的解,用动态规划,自底向上。
树R有k棵子树
设第k棵子树中相距最远的两个节点: Uk和Vk。
d(Uk,Vk)为子树k的最大距离。
假设Uk为子树k中到子树k的根节点Rk的距离最长的节点。
那么其到树的根节点R的距离定义为d(Uk,R)。
选出d(Ui,R)(1≤i≤k)中最大的两个值max1,max2,那么经过根节点R的最长路径为max1+max2+1。
所以树R中相距最远的两个节点的距离为:
max{d(U1,V1),d(U2,V2)…,d(Uk,Vk),max1+max2+1}。

代码:

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值