华为OD机试 - 计算三叉搜索树的高度 - 二叉树(Java 2024 C卷 100分)

news2024/12/23 23:15:08

在这里插入图片描述

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入查找的规则是:

1.如果数小于节点的数减去500,则将数插入节点的左子树

2.如果数大于节点的数加上500,则将数插入节点的右子树

3.否则,将数插入节点的中子树

给你一系列数,请按以上规则,按顺序将数插入树中,构建出一棵三叉搜索树,最后输出树的高度。

二、输入描述

第一行为一个数N,表示有N个数,1<=N<=10000

第二行为N个空格分隔的整数,每个数的范围为[1,10000]

三、输出描述

输出树的高度(根节点的高度为1)。

1、输入

5
5000 2000 5000 8000 1800

2、输出

3

3、说明

最终构造出的树如下,高度为3。

在这里插入图片描述

四、解题思路

  1. 定义一个三叉搜索树的节点类,包括节点的值、左子节点、中子节点和右子节点。
  2. 实现一个方法来插入节点到三叉搜索树中。根据题目描述的规则,我们从根节点开始向下寻找合适的插入位置,直到找到一个合适的空节点插入。
  3. 在插入过程中,我们需要不断更新树的高度。
  4. 最后,输出树的高度即可。

五、Java算法源码

public class OdTest01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取数的个数
        int N = scanner.nextInt();
        // 读取待插入的数
        int[] nums = new int[N];
        for (int i = 0; i < N; i++) {
            nums[i] = scanner.nextInt();
        }

        // 构建三叉搜索树
        TreeNode root = null;
        int height = 0;
        for (int num : nums) {
            if (root == null) {
                // 树为空,创建根节点
                root = new TreeNode(num);
                height = 1;
            } else {
                // 插入新节点,并更新树的高度
                int nodeHeight = insertNode(root, num, 1);
                height = Math.max(height, nodeHeight);
            }
        }

        // 输出树的高度
        System.out.println(height);
    }

    // 插入节点到三叉搜索树中
    private static int insertNode(TreeNode root, int num, int height) {
        if (root == null) {
            // 创建新节点
            return height;
        }

        if (num < root.val - 500) {
            // 插入左子树
            if (root.left == null) {
                root.left = new TreeNode(num);
                return height + 1;
            } else {
                return insertNode(root.left, num, height + 1);
            }
        } else if (num > root.val + 500) {
            // 插入右子树
            if (root.right == null) {
                root.right = new TreeNode(num);
                return height + 1;
            } else {
                return insertNode(root.right, num, height + 1);
            }
        } else {
            // 插入中子树
            if (root.middle == null) {
                root.middle = new TreeNode(num);
                return height + 1;
            } else {
                return insertNode(root.middle, num, height + 1);
            }
        }
    }
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode middle;
    TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }
}

六、效果展示

1、输入

3
5000 4000 3000

2、输出

3

3、说明

最终构造出的树如下,高度为3。
在这里插入图片描述

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

每日Attention学习1——Parallel Aggregation Pyramid Pooling Module

模块出处 [CVPR 23] [link] [code] PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers 模块名称 Parallel Aggregation Pyramid Pooling Module (PAPPM) 模块作用 多尺度特征提取&#xff0c;更大感受野 模块结构 模块代码 import torch imp…

C++聊天服务器数据库创建

创建数据库chat show databases&#xff1a;展示所有的数据库 create database chat&#xff1a;创建一个数据库chat use chat&#xff1a;使用数据库 创建表User、Friend、AllGroup、GroupUser、OfflineMessage 表User包含&#xff1a;用户id、用户名、用户密码、当前登录…

jsp驾校管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 驾校管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用serlvetdaobean mvc 模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

二叉树习题汇总

片头 嗨&#xff01;大家好&#xff0c;今天我们来练习几道二叉树的题目来巩固知识点&#xff0c;准备好了吗&#xff1f;Ready Go ! ! ! 第一题&#xff1a;二叉树的最大深度 解答这道题&#xff0c;我们采用分治思想 1. 递归子问题&#xff1a;左子树的高度和右子树的高度 …

绿盟之旅——一段安全实习结束

去年&#xff0c;因为着急找实习&#xff0c;拿着简历就开始海投&#xff0c;当时想的是有人让我去就谢天谢地了&#xff0c;第一个约我面试的就是绿盟&#xff0c;也很顺利的通过了面试&#xff0c;当时让我选择在上海还是北京&#xff0c;我选择的是上海&#xff0c;因为学校…

热红外相机图片与可见光图片配准教程

一、前言 图像配准是一种图像处理技术&#xff0c;用于将多个场景对齐到单个集成图像中。在这篇文章中&#xff0c;我将讨论如何在可见光及其相应的热图像上应用图像配准。在继续该过程之前&#xff0c;让我们看看什么是热图像及其属性。 二、热红外数据介绍 热图像本质上通…

高薪!【YesPMP】众包平台5月9日最新外包项目

【YesPMP】众包平台5月9日最新外包项目&#xff0c;感兴趣的小伙伴&#xff0c;可进入平台参与竞标&#xff0c;竞标后与项目方直接与联系&#xff0c;双方直接对接。 1.查看项目&#xff1a;go编写的协议网关成品代码(支持modbus,knx等) http:// https://www.yespmp.com/proj…

HTTPS 是如何进行安全传输的 ?

概述 现代密码学对信息的处理主要离不开以下的三种形式&#xff1a; 摘要&#xff1a;主要用于数据校验&#xff0c;例如存储密码等&#xff0c;摘要是对信息进行单向的哈希&#xff0c;改变信息的原有形态&#xff0c;因为哈希函数的特点是易变性&#xff08;即使微小的变化也…

医学四种概念:B超、X光、CT、核磁共振

辐射检测&#xff1a;CT和X光 X光&#xff1a;X光检测价格低、时间短、出片快、辐射小&#xff0c;适合前期检查。由于人体各个组织对X线所产生的影响是不同的&#xff0c;所以就有不同的反应实验就是下图 生成的图片为&#xff0c;它把三维的你压缩成二维的图片了&#xff0c…

上位机图像处理和嵌入式模块部署(树莓派4b和mcu的分工与配合)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树莓派4b从广义上来说&#xff0c;它本身就是一个mini小电脑。我们需要什么软件&#xff0c;就可以apt install去下载即可。这和之前嵌入式linux开…

探索设计模式的魅力:权力集中,效率提升,中心化模式的优势与挑战

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索中心化模式之旅✨ 大家好啊&#xff01;&#x1f44b; 这次我们要聊的是IT界一…

matlab使用教程(66)—在图中绘制多条曲线(2019b以下版本)

您可以采用多种方式合并绘图。利用子图&#xff0c;可在同一坐标区中合并多个图&#xff0c;或在一个图窗中创建多个坐标区。 1.在同一坐标区中合并绘图 默认情况下&#xff0c;新图将清除现有图&#xff0c;并重置标题等坐标区属性。但是&#xff0c;您可以使用 hold on 命令…

Netty HTTP2 示例-响应式编程-013

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform …

数据结构复习指导之二叉树的概念

文章目录 二叉树 考纲内容 复习提示 1.二叉树的概念 1.1二叉树的定义及其主要特性 1.1.1二叉树的定义 1.1.2几种特殊的二叉树 1.1.3二叉树的性质 1.2二叉树的存储结构 1.2.1顺序存储结构 1.2.2链式存储结构 知识回顾 二叉树 考纲内容 &#xff08;一&#xff09;树…

Rust 使用egui创建一个简单的下载器demo

仓库连接: https://github.com/GaN601/egui-demo-download-util 这是我第一个rust gui demo, 学习rust有挺长时间了, 但是一直没有落实到实践中, 本着对桌面应用的兴趣, 考察了slint、egui两种框架, 最后还是选择了egui. 这篇博客同时包含我当前的一些理解, 但是自身技术有限,…

中职大数据专业介绍:大数据技术应用

近年来&#xff0c;人工智能在经济发展、社会进步、国际政治经济格局等方面已经产生重大而深远的影响。规划纲要对“十四五”及未来十余年我国人工智能的发展目标、核心技术突破、智能化转型与应用&#xff0c;以及保障措施等多个方面都作出了部署。 据2020年全国教育事业发展统…

Python - 金三银四心路历程 之 数据结构与算法 刷题

目录 一.引言 二.心路历程 三.刷题经历 四.刷题历程 五.总结 一.引言 <夜深人静写算法> 是 23 年 12 月底博主打算跳槽时开始做刷题准备做的专栏&#xff0c;前后准备了大约一个月&#xff0c;刷题完毕后简单准备了项目和简历后就开始加入找工作大军了&#xff0c;最…

【DevOps】Jenkins 集成Docker

目录 1. 安装 Docker 和 Jenkins 2. 在 Jenkins 中安装 Docker 插件 3. 配置 Docker 连接 4. 创建 Jenkins Pipeline 5. 示例 Pipeline 脚本 6. 运行 Jenkins Job 7. 扩展功能 8、docker配置测试连接的时候报错处理 将 Docker 与 Jenkins 集成可以实现持续集成和持续交…

介绍 ffmpeg.dll 文件以及ffmpeg.dll丢失怎么办的五种修复方法

ffmpeg.dll 是一个动态链接库文件&#xff0c;属于 FFmpeg运行库。它在计算机上扮演着非常重要的角色&#xff0c;因为它提供了许多应用程序和操作系统所需的功能和组件。当 ffmpeg.dll 文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行&#xff0c;甚至系统崩溃。下面…

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块&#xff08;CSS Fragmentation Module Level 3&#xff09;中的一个属性&#xff0c;主要用于指定背景&#xff08;background&#xff09;、内边距&#xff08;padding&#xff09;、边框&#…