二叉树 — 返回二叉树最大距离

news2024/7/31 20:23:51

题目:
给定二叉树头结点head,任何两个节点之间都有距离,求整棵二叉树最大距离。
二叉树如下图所示,假设从x到b,中间节点只能走一次,我们人为规定距离就是整条路径的节点数量,所以距离是3:x -> e -> b。这棵树最大的距离是5(x - > c)。
在这里插入图片描述
分析:
由此可以推断出,一棵树最大的距离共有2类3种情况。一种是经过的head节点,一种是没经过head节点

  1. 经过x节点,那最大距离就是左树高度+右树高度+1(head节点)
  2. 没经过x节点,则可能会是左子树的最大距离,也可能是右子树的最大距离
public static class Node{
        int val;
        Node left;
        Node right;
        public Node(int val){
            this.val = val;
        }
    }
    //收集左右子树信息,树高度和最大距离
    public static class Info{
        int height;
        int maxDistinct;

        public Info(int height,int maxDistinct){
            this.height = height;
            this.maxDistinct = maxDistinct;
        }
    }

    public static int maxDistinct(Node head){
        if (head == null ){
            return 0;
        }
        return process(head).maxDistinct;
    }
		
    public static Info process(Node head){
        if (head == null){
            return new Info(0,0);
        }
		
        Info leftInfo = process(head.left);
        Info rightInfo = process(head.right);
		
        int height = Math.max(leftInfo.height,rightInfo.height) + 1;
        //一共3种情况
        //最大距离是左子树的最大距离
        int p1 = leftInfo.maxDistinct;
        //最大距离是右子树的最大距离
        int p2 = rightInfo.maxDistinct;
        //经过了head节点,那么就是左右子树的高度相加 再加上head节点的 1
        int p3 = leftInfo.height +  rightInfo.height + 1;
		//在3种情况中求得这棵树的最大距离
        int maxDistinct = Math.max(p3,Math.max(p1,p2));
        return new Info(height,maxDistinct);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 中的 Spring Cloud Gateway

Spring Boot 中的 Spring Cloud Gateway Spring Cloud Gateway 是一个基于 Spring Boot 的网关框架,它提供了一种统一的入口,将所有的请求路由到不同的后端服务中。Spring Cloud Gateway 采用了 Reactive 编程模型,可以处理大量并发请求&…

idea闪退,端口占用处理

1、idea --> Terminal 2、 输入命令 jps 查看进程 3、找到对应的进程,使用 taskkill /pid 端口号 /f 4、 重启项目 ,即可

Golang快速鸟瞰

文章目录 引子知识图谱包代理设置关键字数据类型变量struct 和 interface控制语句字符串单引号、双引号、反引号数组与切片字典make和newjson与yaml基本语法指针Channeldeferinit函数类error, panic, recoverchannel与协程调试热加载Gin的热加载Iris的热加载 常用Golang框架常用…

数据库基础作业(linux系统)

数据库作业 在linux系统下的MySQL 创建数据库 使用数据库 查询当前默认的数据库以及使用的编码方式校验规则 查询创建数据的语句 删除数据库 创建数据表 定义多个字段,用上所有数据类型 mysql> SHOW CREATE TABLE multi_tb; -----------------------------------------…

重新理解z-index

一,前言 今天遇到一个布局兼容问题,调试了一番,发现z-index的表现和自己的认知不相符,才知道自己对z-index的认知有错误,于是写篇文章总结下这个z-index的具体使用。有基础的朋友可以直接看第四节。 二,标…

Android 内存治理之线程

1、 前言 当我们在应用程序中启动一个线程的时候,也是有可能发生OOM错误的。当我们看到以下log的时候,就说明系统分配线程栈失败了。 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory这种情况可能是两种原因导致的。…

行业追踪,2023-07-06,市场反馈平平

自动复盘 2023-07-06 成交额超过 100 亿 排名靠前,macd柱由绿转红 成交量要大于均线 有必要给每个行业加一个上级的归类,这样更能体现主流方向 rps 有时候比较滞后,但不少是欲杨先抑, 应该持续跟踪,等 macd 反转时参与…

rust 从转移说起

Rust 专门提出了所有权和转移的概念,第一次接触总感觉晦涩,不属于正常思维,但还是得耐下性子,观摩观摩 Rust 所谓的转移。 Rust 中,对大多数类型而言,给变量赋值、给函数传值或者从函数返回值,…

Eclipse显示层级目录结构(像IDEA一样)

有的小伙伴使用IDEA习惯了,可能进入公司里面要求使用eclipse,但是eclipse默认目录是并列显示,而不是层级显示。部分人用起来感觉十分不方便。我们可以更改一下设置。 1、打开eclipse,找到这里 2、选择PackagePresentation 3、选…

支持跨语言、人声狗吠互换,仅利用最近邻的简单语音转换模型有多神奇

AI 语音转换真的越复杂越好吗?本文就提出了一个方法简单但同样强大的语言转换模型,与基线方法相比自然度和清晰度毫不逊色,相似度更是大大提升。 AI 参与的语音世界真神奇,既可以将一个人的语音换成任何其他人的语音,…

express框架中间件

1.介绍 说明:Express框架中间件是指在处理HTTP请求前或后对请求和响应进行处理的函数。具体而言,中间件可以: 执行一些公共的逻辑,比如身份验证、日志记录、错误处理等。修改请求和响应,比如缓存、压缩等。控制请求流…

ModaHub魔搭社区:基于 Amazon EKS 搭建开源向量数据库 Milvus

目录 01 前言 02 架构说明 03 先决条件 04 创建 EKS 集群 05 部署 Milvus 数据库 06 优化 Milvus 配置 07 测试 Milvus 集群 08 总结 01 前言 生成式 AI(Generative AI)的火爆引发了广泛的关注,也彻底点燃了向量数据库&…

Ubuntu中删除LibreOffice方法

目录 删除LibreOffice套件 删除所有与LibreOffice相关的软件包 删除与LibreOffice相关的配置文件 删除LibreOffice套件 1、打开终端。您可以使用快捷键Ctrl Alt T来打开终端。 2、输入以下命令以卸载LibreOffice套件: sudo apt-get remove libreoffice* 删…

[管理与领导-7]:新任管理第1课:管理转身--从技术业务走向管理 - 管理常识1

目录 第1章 管理基本概念 1.1 什么是管理? 1.2 管理的要素与职能 第2章 管理是什么? 2.1 以终为始 2.2 资源的优化配置 2.3 分而治之:分目标、分任务、分权力、分利益 2.4 目标明确 2.5 优先级 2.6 知人善用,人尽其才 …

【零基础入门学习Python---Python与其他技术的整合之快速入门实践】

🚀 零基础入门学习Python🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜…

2023和鲸夏令营创作活动【黄金价格分析预测】

2023和鲸夏令营创作活动【黄金价格分析预测】 文章目录 2023和鲸夏令营创作活动【黄金价格分析预测】一、项目背景二、数据说明三、数据预处理四、数据探索性分析五、构建LSTM模型预测1、构建LSTM模型2、绘制loss的变化曲线3、进行预测 一、项目背景 本项目的目标是分析并预测…

SpringBoot——在测试阶段验证Web表现层的接口是否正常

验证请求状态 之前我们实现了在测试环境中开启Web环境,并且在测试阶段发送虚拟请求,并看到了返回的结果,这次我们不止要看他的请求结果,还要看他的请求过程和请求状态 匹配请求状态 首先就是查看请求的状态。主要介绍的就是一个…

基于 Arduino 库实现 ESP32 使能 WiFi AP + TCP Server 的应用

实现步骤&#xff1a; ESP32 开启 WiFi AP 模式创建 WiFi 热点定义 IP 地址创建 TCP Server 测试代码如下&#xff1a; #include <WiFi.h> #include <WiFiClient.h>const char* ssid "cc123"; const char* password "espressif";WiFiServ…

Python-年会抽奖

#!/usr/bin/python # coding:utf-8 # Author:Rauckimport randomclass WhoIsLuck:"""年会抽奖"""# 奖品gift [{name: 一等奖, limit: 3, desc: 泰国5日游手术费报销},{name: 二等奖, limit: 6, desc: iPhone14手机},{name: 三等奖, limit: 30, …

【Linux OS】华为openEuler操作系统与openGauss数据库安装及使用入门

华为openEuler操作系统与openGauss数据库安装及使用入门 1、软件下载1.1、openEuler1.2、openGauss1.3、Data Studio 2、系统安装2.1、创建虚拟机2.2、安装操作系统2.3、登录系统 3、数据库安装及设置3.1、数据库安装3.2、数据库管理3.3、数据库设置 4、数据库访问4.1、Navicat…