目录

  • 一、题目描述
  • 二、输入描述
  • 三、输出描述
  • 四、解题思路
  • 五、Java算法源码
  • 六、效果展示
    • 1、输入
    • 2、输出
    • 3、说明

大家好,我是哪吒。

做技术,我是认真的,立志于打造最权威的华为OD机试真题专栏,帮助那些与我有同样需求的人(考华为OD机试,升职加薪),每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑

华为OD机试(JAVA)真题(A卷+B卷)

一、题目描述

普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。

1、为了模拟伞状雨滴效应,用二叉树来模拟二维平面伞(如下图所示),现在输入一串正整数数组序列(不含0,数组成员至少是1个),若此数组序列是二叉搜索树的前序遍历结果,那么请输出一个返回值1,否则输出0。

2、同时请将此序列构成的伞状效应携带到地面的数组信息输出(左边伞坠信息,右边伞坠信息,详细参考示例图地面上的数字),若此树不存在左右坠,则对应位置返回0,。同时若非二叉排序树,那么左右伞坠信息也返回0。

二、输入描述

1个通过空格分割的整数序列字符串,数组不含0,数组成员至少1个,输入的数组的任意两个数字都互不相同,最多1000个
正整数,正整数取值范围1~65535。

三、输出描述

输出如下三个值,以空格分割:是否是二叉排序树,左侧地面呈现的伞坠数字值,右侧地面呈现的伞坠数字值。
若是二叉排序树,则输出1,否则输出0。

若不存在左侧或右侧伞坠值,那么对应伞坠值直接输出0。

四、解题思路

二叉搜索树又称二叉排序树,具有以下性质:

  1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;
  2. 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;
  3. 它的左右子树也分别为二叉搜索树;

二叉搜索树就不能插入重复的元素了,且每次插入都是插入到叶子节点的位置。

插入的元素比当前位置元素小就往左走,比当前位置元素大就往右走,直到为空。

五、Java算法源码

package com.guor.od;import java.util.Scanner;
import java.util.*;public class OdTest01 {/** 二叉搜索树:* 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;* 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;*/public static void main(String[] args) {Scanner in = new Scanner(System.in);// 输入的节点值int[] arr = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 第一个节点为根节点TreeNode root = new TreeNode(arr[0]);// 保存节点Deque<TreeNode> deque = new ArrayDeque<TreeNode>();// 加入根节点deque.push(root);// 当前节点的前一个节点TreeNode preNode = new TreeNode(-1);// 是否满足二叉搜索树属性boolean flag = true;// 判断并构造二叉搜索树for (int i = 1; i < arr.length; i++) {// 当前节点的前一个节点TreeNode node = deque.peekLast();// 当前节点TreeNode currentNode = new TreeNode(arr[i]);// 前一个节点的值小于当前节点的值while (!deque.isEmpty() && deque.peekLast().value < currentNode.value) {node = deque.removeLast();// 如果队列不为空,更新前一个节点值if (!deque.isEmpty()) {preNode = deque.peekLast();}}// 小的值放在左子树if (node.value < currentNode.value) {node.right = currentNode;preNode = node;} else {// 不满足二叉搜索树属性直接跳出if (currentNode.value < preNode.value) {flag = false;break;}// 大的值放在右子树node.left = currentNode;}// 将当前的值加入队列deque.addLast(currentNode);}// 如果满足二叉搜索树特性,获取左子树的最左节点,右子树的最右节点if (flag) {TreeNode leftNode = root;while (leftNode.left != null || leftNode.right != null) {if (leftNode.left != null) {leftNode = leftNode.left;} else {leftNode = leftNode.right;}}TreeNode rightNode = root;while (rightNode.left != null || rightNode.right != null) {if (rightNode.right != null) {rightNode = rightNode.right;} else {rightNode = rightNode.left;}}// 1 表示符合二叉搜索树// leftNode 左侧地面呈现的伞坠数字值// rightNode 右侧地面呈现的伞坠数字值StringBuilder builder = new StringBuilder();builder.append(1).append(" ").append(leftNode.value == root.value ? 0 : leftNode.value).append(" ").append(rightNode.value == root.value ? 0 : rightNode.value);System.out.println(builder);} else {// 不符合二叉搜索树时直接输出0System.out.println("0 0 0");}return;}// 定义一棵树static class TreeNode {private int value;private TreeNode left;private TreeNode right;public TreeNode(int value) {this.value = value;}}
}

六、效果展示

1、输入

6 4 3 5 8 7 9 10

2、输出

1 3 10

3、说明

6 4 3 5 8 7 9 10能够组成一个二叉搜索树,输出左侧地面呈现的伞坠数字值3,右侧地面呈现的伞坠数字值10。

华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路相关推荐

  1. 华为OD机试真题 Java 实现【异常的打卡记录】【2023Q1 100分】

    一.题目描述 考勤记录是分析和考核职工工作时间利用情况的原始依据,也是计算职工工资的原始依据. 为了正确地计算职工工资和监督工资基金使用情况,公司决定对员工的收集打卡记录进行异常排查. 如果出现以下两 ...

  2. 【华为OD机试真题 python】羊、狼、农夫过河【2022 Q4 | 100分】

    前言 <华为OD笔试真题 python> 专栏含华为OD机试真题.华为面试题.牛客网华为专栏真题. 如果您正在准备华为的面试,或者华为od的机会,有任何想了解的可以私信我进行交流.我会尽可 ...

  3. 【华为OD机试真题 python】最多等和不相交连续子序列【2022 Q4 | 100分】

    前言 <华为OD笔试真题 python> 本专栏包含华为OD机试真题,会实时更新收纳网友反馈,为大家更新最新的华为德科OD机试试题,为大家提供学习和练手的题库,订阅本专栏后可私信进交流群哦 ...

  4. 【华为OD机试真题 java、python、c++】机房布局【2022 Q4 200分】

    代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java.python.c++三种代码 题目描述 小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每 ...

  5. 【华为OD机试真题 JAVA】热点网站统计

    JS版:[华为OD机试真题 JS]热点网站统计 标题:热点网站统计 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页 ...

  6. 【华为OD机试真题 JAVA】找城市

    JS版: [华为OD机试真题 JS]找城市 标题:找城市 | 时间限制:1秒 | 内存限制:65536K | 语言限制:不限 一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要 ...

  7. 【华为OD机试真题 JAVA】九宫格按键输入

    JS版:[华为OD机试真题 JS]九宫格按键输入 标题:九宫格按键输入 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字 ...

  8. 【华为OD机试真题 JAVA】跳格子游戏

    JS版:[华为OD机试真题 JS]跳格子游戏 标题:跳格子游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关 ...

  9. 【华为OD机试真题 JAVA】分积木

    JS版:[华为OD机试真题 JS]分积木 标题:分积木 | 时间限制:1秒 | 内存限制:32768K | 语言限制:不限 Solo和koko是两兄弟,妈妈给了他们一大堆积木,每块积木上都有自己的重量 ...

最新文章

  1. java出现404的原因是_为什么使用eclipse总是出现404
  2. anaconda使用记录
  3. IntelliJ IDEA 提交代码时出现:Code analysis failed with exception: com.intellij.psi......(亲测)
  4. SELECT COUNT语句
  5. python系统下载-pythonox下载
  6. 多重继承java_Java中的多重继承
  7. 计算机主机地址填什么,什么是IP地址 何设置IP地址
  8. 常用 25/26 Flash 系列器件型号、ID、容量对照表
  9. C++实现端口扫描器
  10. python中zlib库用法详解(压缩与解压缩)
  11. Review | 科学禁食时代的来临
  12. 【问题解决】OpenWrt报错nf_conntrack: automatic helper assignment is deprecated and it will be removed soon.
  13. win7系统提示计算机内存不足,Win7系统下提示内存不足的原因及解决方法
  14. PLC如何实现二阶滤波器算法(二阶巴特沃斯低通滤波器FIR_Filter)
  15. Python学习笔记 之 从入门到放弃
  16. gmap 支持python吗_基于GMap.Net的地图解决方案
  17. 1076. Wifi密码 (15)
  18. 那家注册了今日油条,饼多多,快手抓饼的公司终于被起诉了
  19. 全国计算机信息高新技术考试办公软件应用模块技师级,全国计算机信息高新技术考试办公软件应用模块高级操作员级考试考....
  20. amx 源码 是c语言吗,AMX MOD 简介及入门 (菜鸟勿入)

热门文章

  1. go os.Args 学习
  2. C# txt文本文件导入到dataGridView1 索引超出数组限定
  3. matlab画图程序整理
  4. python节日快乐_节日快乐! Python画一棵圣诞树送给你
  5. python二级测试真题(2)
  6. OpenCV3+python3实现视频转字符动画
  7. 【转】编译EDEM2018+Fluent19.0耦合接口
  8. Ezreal--将一个动画切割为四动作动画成功---New Unity Project (3).
  9. Data-Driven 3D Voxel Patterns for Object Category Recognition
  10. 【转载】Ubuntu下安装配置OpenNI, OpenCV(来自韶子空间)