二叉树中节点的最大的距离(编程之美3.8)

简介:

问题定义

把二叉树看成一个图,父子节点之间的连线看成是双向的,定义“距离”为两个节点之间的边数。例如下图中最大距离为红线的条数为6.

分析

定义:过以节点x作为根节点的子树中,节点间的最大距离为Dis(x)。

上图,左图中Dis(根节点)最大,右图中Dis(根节点->left)最大。从上边可以看出每个节点都可能成为最大距离根节点的潜质。

因此可以求出每个Dis(节点),从中得出最大值即为整个二叉树的根节点最大值。

在求过点x的最大距离时,最大距离的两个点有可能出现在三种情况下

  1. 左子树
  2. 右子树
  3. 过节点x

经分析得出以下特点

  1. 以上三种情况最终必定一叶子结束
  2. 在第三种情况下必然是左子树高度 与 右子树高度 之和(只有这样,才可能取得最大值)

经过以上分析即可得出递推式

Dis(x) = max(Dis(x->left), Dis(x->right), height(x->left)+height(x->right))

参考代码

复制代码
int treeDistance(BiTree root)
{
    if(root == NULL)
        return 0;
    else if(root->left == NULL && root->right == NULL)
        return 0;
    int dis = max(height(root->left) + height(root->right), treeDistance(root->left), treeDistance(root->right));
    if(maxDis < dis)
        maxDis = dis;
    return dis;
}
复制代码

这里用了一个技巧:maxDis是个全局变量,递归一次根节点会遍历到每个节点,在这期间于maxDis比较,从而得出了最大值,而不需要额外的空间。
完整运行代码

  View Code

结果
4

 



本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3555151.html,如需转载请自行联系原作者

相关文章
|
开发者 物联网 物联网安全
透视盒马:新零售操作系统的秘密
盒马是一个端到端,线上线下一体化的零售业务。在阿里CIO学院攻“疫”技术公益大咖说的第十六场直播中,盒马技术负责人何崚详细介绍了盒马产品技术在构建供给网络、销售网络、物流网络这三个核心命题时遇到的挑战和技术难点。
4811 2
|
监控 网络协议 NoSQL
五分钟带你读懂 TCP全连接队列(图文并茂)
今天有个小伙伴跑过来告诉我有个奇怪的问题需要协助下,问题确实也很奇怪。客户端调用RT比较高并伴随着间歇性异常Connection reset出现,而服务端CPU 、线程栈等看起来貌似都很正常,而且服务端的RT很短
9280 0
五分钟带你读懂 TCP全连接队列(图文并茂)
|
Linux
htop的安装和使用!
ubuntu: sudo apt-get install htop centos:     1、下载htop rpm包     wget http://pkgs.repoforge.org/htop/htop-1.
3898 0
|
关系型数据库 MySQL Java
天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)
天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)
2608 0
|
设计模式 存储 人工智能
基于阿里云通义星尘实现多智能体(Multi-agent)协同工作的构想与尝试
近年来,大规模预训练模型(大模型)快速发展,其能力显著增强,尤其是在语言理解和生成方面取得了突破。然而,尽管大模型强大,但仍需被动响应指令,为此,研究转向了更具自主性的新范式——智能体(AI agent)。不同于仅执行命令的大模型,智能体不仅能理解复杂指令,还能规划行动步骤并在特定领域自我学习与改进。为进一步提高处理复杂任务的能力,多智能体(Multi-Agent)系统应运而生,多个智能体通过协作、交流信息和共享资源,共同完成更为复杂精细的任务。本文探讨了如何利用阿里云的通义星尘实现基础的多智能体协同工作,介绍了智能体的概念、优势及局限性,并通过具体案例展示了如何构建协作型多智能体系统。
|
XML 前端开发 JavaScript
【Android】MVC,MVP,MVVM的优缺点
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构.
697 0
【Android】MVC,MVP,MVVM的优缺点
抖音超火的圣诞树代码,html源码分享
抖音超火的圣诞树代码,html源码分享
3160 0
vscode设置自动保存步骤
vscode设置自动保存就不用每次要运行时候去先保存一下才能加载新页面了
19638 0
vscode设置自动保存步骤
|
算法 安全 数据库
隐语小课|基于同态的隐私信息检索协议-SealPIR介绍
隐语小课|基于同态的隐私信息检索协议-SealPIR介绍
1041 0