二维伞的雨滴效应
2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷
华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)
题目描述
普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。
1、为了模拟伞状雨滴效应,用二叉树来模拟二维平面伞(如下图所示),现在输入一串正整数数组序列(不含0,数组成员至少是1个) ,若此数组序列是二叉搜索树的前序遍历的结果,那么请输出一个返回值1,否则输出0.
2、同时请将此序列构成的伞状效应携带到地面的数字信息输出来(左边伞坠信息,右边伞坠信息,详细参考示例图地面上数字),若此树不存在左或右扇坠,则对应位置返回0。同时若非 二叉排序树那么左右伞坠信息也返回0。

输入描述
1个通过空格分割的整数序列字符串,数组不含0,数组成员至少1个,输入的数组的任意两个数字都互不相同,最多1000个正整数,正整数值范围1~655350
输出描述
输出如下三个值,以空格分隔: 是否二叉排序树,左侧地面呈现的伞坠数字值,右侧地面呈现的伞坠数字值. 若是二叉排序树,则输出1,否则输出0 (其左右伞坠值也直接赋值0) 。 若不存存在左侧或者右侧伞坠值,那么对应伞坠值直接赋值0。
用例
输入
8 3 1 6 4 7 10 14 13
输出
1 1 13
说明
1表示是二叉搜索 树前序遍历结果,1表示左侧地面呈现的伞坠数字值,13表示右侧地面呈现的伞坠数字值
解题思路
这道题目主要涉及两个核心问题:
- 判断给定的前序遍历序列是否能构成一个有效的二叉搜索树(BST)
- 找出"伞坠"的位置并输出其值
核心算法思想
1. 二叉搜索树判断与构建
这个问题使用了一个巧妙的方法,同时完成BST的判断和构建:
- 分区思想:在BST的前序遍历中,根节点后紧跟的是左子树节点,然后是右子树节点
- 值域约束:BST中,左子树的所有节点值必须小于根节点,右子树的所有节点值必须大于根节点
算法步骤:
- 对于当前子树范围[start, end],根节点值为preOrder[start]
- 从start+1开始寻找第一个大于等于根节点的位置i,则[start+1, i-1]为左子树范围
- 从i开始检查到end,所有值必须大于根节点,否则不是有效BST
- 递归检查左子树和右子树
这种方法的时间复杂度为O(n²),其中n是序列长度。
2. 伞坠值获取
伞坠值对应二叉树最左侧和最右侧的叶子节点:
-
左伞坠:从根开始,总是尽量往左走,如果左子节点为空才往右
-
右伞坠:从根开始,总是尽量往右走,如果右子节点为空才往左
-
level参数:用于区分根节点和其他节点,只有level>0时才返回叶子节点的值