华为od真题2023-C卷-三叉搜索树

news/2024/4/28 3:49:02

题目描述:

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

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

  • 1.如果数小于节点的数减去500,则将数插入节点的左子树
  • 2.如果数大于节点的数加上500,则将数插入节点的右子树
  • 3.否则,将数插入节点的中子树

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

输入描述

第一行为一个数N,表示有N个数,1<=N<=10000
第二行为N个空格分隔的整数,每个数的范围为[1,10000]

输出描述

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

示例1

输入 

5

5000 2000 5000 8000 1800

输出

3

/*** 根节点*/static Node root;/*** 节点类*/static class Node {int value;Node left, middle, right;public Node(int value) {this.value = value;left = null;middle = null;right = null;}}public static void main(String[] args) {Scanner in = new Scanner(System.in);int N = in.nextInt();for (int i = 0; i < N; i++) {int num = in.nextInt();insert(num);//插入到三叉树中}int height = getHeight(root);//获取树的高度System.out.println(height);}/*** 获取树的高度** @param root 根节点* @return 返回树的高度*/private static int getHeight(Node root) {if (root == null) {return 0;}int leftHeight = getHeight(root.left);int middleHeigth = getHeight(root.middle);int rightHeighth = getHeight(root.right);return 1 + Math.max(Math.max(leftHeight, middleHeigth), rightHeighth);}/*** 插入节点** @param num 待插入的值*/private static void insert(int num) {root = insertRec(root, num);}/*** 递归插入节点** @param root  当前节点* @param value 待插入的值* @return 返回插入后的节点*/private static Node insertRec(Node root, int value) {if (root == null) {return new Node(value);}if (value < root.value - 500) {root.left = insertRec(root.left, value);} else if (value > root.value + 500) {root.right = insertRec(root.right, value);} else {root.middle = insertRec(root.middle, value);}return root;}

 解题思路

  1. 定义一个节点类 Node,包含节点值 value 和三个子节点 left、middle、right。
  2. 定义一个静态的根节点 root。
  3. 实现插入节点的方法 insert,采用递归方式实现。根据规则将新数插入到合适的子树中。
  4. 实现计算树高度的方法 getHeight,同样采用递归方式,返回以当前节点为根的子树的高度。

 

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS-类型定义

说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Resource 资源引用类型&#xff0c;用于设置组件属性的值。 可以通过$r或者$rawfile创建Resource类型对象&#xff0c;不可以修改Res…

从零开始的 dbt 入门教程 (dbt cloud 自动化篇)

一、引 在前面的几篇文章中&#xff0c;我们从 dbt core 聊到了 dbt 项目工程化&#xff0c;我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发&#xff0c;那么到现在我们更迫切需要解决的是如何让数据更新做到定时化&#xff0c;毕竟作为开发我们肯定没有经历每天定…

html5cssjs代码 035 课程表

html5&css&js代码 035 课程表 一、代码二、解释基本结构示例代码常用属性样式和装饰响应式表格辅助技术 一个具有亮蓝色背景的网页&#xff0c;其中包含一个样式化的表格用于展示一周课程安排。表格设计了交替行颜色、鼠标悬停效果以及亮色表头&#xff0c;并对单元格设…

【物联网开源平台】tingsboard二次开发环境搭建+编译

文章目录 一&#xff0c;需要准备的环境二&#xff0c;获取tingsboard源码1.git拉取源码2.下载源码压缩包 三.新建仓库存放依赖文件四&#xff0c;编译五&#xff0c;遇到的错误 提示&#xff1a; 1.这篇只要准备两个环境&#xff0c;方法更简单&#xff01; 2.基于tingsboard …

基于SSM非遗视域下喀什旅游网站

ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高&#xff0c;然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式&#xff0c;各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…

CSRF一-WEB攻防-CSRF请求伪造Referer同源置空配合XSSToken值校验复用删除

演示案例&#xff1a; CSRF-无检测防护-检测&生成&利用CSRF-Referer同源-规则&上传&XSSCSRF-Token校验-值删除&复用&留空 #CSRF-无检测防护-检测&生成&利用 检测&#xff1a;黑盒手工利用测试&#xff0c;白盒看代码检验&#xff08;有无token…