华为OD机试 - 计算三叉搜索树的高度 (python 2024年C卷D卷)

华为OD机试(C卷+D卷)2024真题目录(Java & c++ & python)

题目描述

定义构造三叉搜索树规则如下:

每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的规则是:

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

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

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

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

输入描述

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

从第二行开始输入N行,每行一个整数,每个数的范围为[1,10000]

输出描述

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

示例1

输入

5
5000 
2000 
5000 
8000 
1800

输出

3

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

示例2

输入

3
5000 
4000 
3000

输出

3

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

示例3

输入

9
5000 
2000 
5000 
8000 
1800 
7500 
4500 
1400 
8100

输出

4

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

解题思路

只需要模拟三叉树结构,然后按照题目要求去插入新节点,并更新高度即可。

参考代码


class TreeNode:def __init__(self, val):self.val = val  # 节点值self.height = None  # 节点所在高度self.left = None  # 左子树self.mid = None  # 中子树self.right = None  # 右子树class Tree:def __init__(self):self.root = None  # 树的根节点self.height = 0  # 树的高度def add(self, val):node = TreeNode(val)if self.root is None:# 如果树是空的,则当前创建的节点将作为根节点node.height = 1  # 根节点的高度为1self.root = nodeself.height = 1else:# 如果树不是空的,则从根节点开始比较cur = self.rootwhile True:# 假设创建的节点node是当前节点cur的子节点,则node节点高度值=cur节点高度值+1node.height = cur.height + 1# 如果创建的node进入新层,则更新树的高度self.height = max(node.height, self.height)if val < cur.val - 500:# 如果数小于节点的数减去500,则将数插入cur节点的左子树if cur.left is None:# 如果cur节点没有左子树,则node作为cur节点的左子树cur.left = node# 停止探索breakelse:# 否则继续探索cur = cur.leftelif val > cur.val + 500:# 如果数大于节点的数加上500,则将数插入节点的右子树if cur.right is None:cur.right = nodebreakelse:cur = cur.rightelse:# 如果数在当前节点值的 -500 和 +500 之间,则将数插入节点的中子树if cur.mid is None:cur.mid = nodebreakelse:cur = cur.midn = int(input())tree = Tree()
for i in range(n):num = int(input())tree.add(num)print(tree.height)

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

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

相关文章

【字母异位词分组】python刷题记录

R2-字符串篇 class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:#哈希表分组#把每种字母出现次数相同的字符串分到同一组#sort一下好像能分dictdefaultdict(list)for s in strs:asorted(s)#sorted(s)相同的字符串分到同一组dict[.join(a)].appen…

Java 基础 and 进阶面试知识点(超详细)

一个 Java 文件中是否可以存在多个类&#xff08;修饰类除外&#xff09;&#xff1f; 一个 Java 文件中是可以存在多个类的&#xff0c;但是一个 Java 文件中只能存在一个 public 所修饰的类&#xff0c;而且这个 Java 文件的文件名还必须和 public 所修饰类的类名保持一致&a…

如何应对零日威胁:漏洞扫描

零日威胁正变得比以往任何时候都更加危险。5月底至6月初&#xff0c;恶意行为者通过零日攻击接管了众多名人和品牌的TikTok账户。用户声称在打开一条私信后便丧失了账户的控制权。而用于攻击的恶意软件能够在用户不下载或安装任何程序的情况下感染设备。 目前尚不清楚此次事件的…

linux系统巡检及shell脚本

目录 步骤1 系统巡检基本命令 CPU 内存 磁盘 进程 网络、流量 步骤2 shell脚本编写 awk awk常用内置变量 awk正则 实例一 实例二 实例三 实例四 实例五 sed 选项与参数 例一 例二 例三 例四 例五 例六 例七 grep 主要参数 常用用法 例一 例二 例三…

vue 开发环境配置

1. nvm 安装 在 github上下载 最新的 nvm 包 https://github.com/coreybutler/nvm-windows/releases或者在 csdn 上下载&#xff08;从github上迁移&#xff0c;方便下载&#xff09;https://download.csdn.net/download/u011171506/89585197 下载后不用修改任何配置&#x…

2024年【广东省安全员B证第四批(项目负责人)】考试报名及广东省安全员B证第四批(项目负责人)模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试报名根据新广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将广东省安全员B证第四批&#x…

系统架构师(每日一练7)

每日一练 1.关于网络延迟正确的是()。答案与解析 A.在对等网络中&#xff0c;网络的延迟大小与网络中的终端数量无关 B.使用路由器进行数据转发所带来的延迟小于交换机, C.使用internet服务器可最大程度地减小网络延迟 D.服务器延迟的主要影响因素是队列延迟和磁盘10延迟 2.以…

【ESP32 IDF SPI硬件驱动W25Q64】

目录 SPISPI介绍idf配置初始化配置通信 驱动代码 SPI SPI介绍 详细SPI介绍内容参考我之前写的内容【ESP32 IDF 软件模拟SPI驱动 W25Q64存储与读取数组】 idf配置 初始化配置 spi_bus_initialize() 参数1 &#xff1a;spi几&#xff0c;例如spi2,spi3 参数2&#xff1a;…

GitHub Actions是什么

目录 GitHub Actions是什么 GitHub Actions的使用方法 示例 注意事项 GitHub Actions配置文件中-工作流的 :Workflow 一、自动化任务执行 二、规范团队协作 三、灵活配置和定制 四、提高开发效率 五、集成GitHub生态 六、可复用性和共享性 仓库中的“Actions”部分…

mac 使用ssh 密钥登录linux 服务器

本地操作 1. 生成SSH密钥对 # your_emailexample.co 自行定义即可 ssh-keygen -t rsa -b 4096 -C "your_emailexample.com"这会提示你输入文件保存位置和密码(密码可以留空)&#xff1a; Generating public/private rsa key pair. Enter file in which to save the…

Postman入门(三):创建post请求及请求参数

创建post请求Raw data&#xff1a; 请求方式&#xff1a;Post 请求体&#xff1a;raw,选择json格式 参数{}内数据&#xff0c;点击send即可发送请求 创建post请求Form-data: 请求方式&#xff1a;Post 请求体&#xff1a;form-data, 参数&#xff1a;在form-data内&#…

Lombok的认识

Lombok的作用 Lombok是一个Java库&#xff0c;它可以通过简单的注解形式来帮助开发人员简化Java代码的编写&#xff0c;特别是减少模板代码的书写。具体来说&#xff0c;Lombok的主要作用包括&#xff1a; 减少模板代码&#xff1a;Lombok可以通过注解自动生成getter、setter、…

Javascript 沙漏图案(Hour-glass Pattern)

给定正整数 n&#xff0c;以沙漏形式打印数字模式。示例&#xff1a; 输入&#xff1a;rows_no 7 输出&#xff1a; 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6…

Windows系统安全加固方案:快速上手系统加固指南(上)

无论是个人用户、小型企业还是大型机构&#xff0c;都需要采取措施保护其计算机系统免受各种威胁、系统加固常见的应用场景有个人用户、 AWD 比赛、公共机构以及企业环境等等 文档目录 一、Windows常用命令二、Windows常见端口三、账户安全3.1 默认账户安全3.2 按照用户分配账户…

大数据-44 Redis 慢查询日志 监视器 慢查询测试学习

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

代码随想录算法训练营day25 | 491.递增子序列 、46.全排列 、47.全排列 II、51.N皇后、37.解数独

碎碎念&#xff1a;加油加油&#xff0c;继续坚持 参考&#xff1a;代码随想录 491.递增子序列 题目链接 491.递增子序列 思想 注意结果中不能有重复的子集。 不能排序后处理&#xff0c;因为进行排序以后改变元素顺序&#xff0c;求的递增子序列会改变。 树形图&#xf…

大模型金九银十秋招:AI时代的就业新趋势,收藏我这篇就够了非常详细

随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Models&#xff09;在各个领域的应用日益广泛&#xff0c;从自然语言处理到图像识别&#xff0c;从自动驾驶到智能推荐系统&#xff0c;大模型正逐渐成为AI领域的新宠。在这个背景下&#xff0c;大模型的秋招&a…

sizeof和strlen区别

如图&#xff0c;sizeof来计算的时候&#xff0c;得出的是计算机用多少个字节来表示一个地址 而strlen来计算的时候&#xff0c;只是计算出他的有效字符长度 打印出的不同地址就是其不同的区别

Visual Studio 智能代码插件:Fitten Code

Fitten Code 是由非十大模型驱动的AI编程助手&#xff0c;它可以自动生成代码&#xff0c;提升开发效率&#xff0c;协助调试 Bug&#xff0c;节省时间。还可以对话聊天&#xff0c;解决编程碰到的问题。 Fitten Code 免费且多种编程语言&#xff0c;包括 Python、C、Javascri…

Python 爬虫入门(一):从零开始学爬虫 「详细介绍」

Python 爬虫入门&#xff08;一&#xff09;&#xff1a;从零开始学爬虫 「详细介绍」 前言1.爬虫概念1.1 什么是爬虫&#xff1f;1.2 爬虫的工作原理 2. HTTP 简述2.1 什么是 HTTP&#xff1f;2.2 HTTP 请求2.3 HTTP 响应2.4 常见的 HTTP 方法 3. 网页的组成3.1 HTML3.2 CSS3.…