华为OD统一考试 - 计算三叉搜索树的高度

题目描述

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

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

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

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

输入描述

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

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

输出描述

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

用例

输入

5

5000 2000 5000 8000 1800

输出

3

说明

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

输入

3

5000 4000 3000

输出

3

说明

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

输入

9

5000 2000 5000 8000 1800 7500 4500 1400 8100

输出

4

说明

最终构造出的树如下,高度为4:

题目解析

本题应该只是需要模拟出三叉树结构,以及根据指定的逻辑进行插入新节点。

三叉树节点的数据结构定义如下:

{

  val, // 节点值

  height,// 节点所在高度,

  left,// 左子树根节点,

  right,// 右子树根节点,

  mid,// 中子树根节点

}

三叉树的数据结构定义如下:

{

  root,// 根节点

  height,// 树的高度

}

三叉树插入新节点node逻辑:

  • 如果三叉树为空,则三叉树根节点root = 新节点node
  • 如果三叉树不为空,则从三叉树根节点作为比较节点cur开始比较:
  1. 如果 node.val < cur.val - 500,则node应该插入到cur节点的左子树中,若 cur 节点不存在左子树,那么 node 就作为 cur 节点的左子树根节点,且node.height = cur.height + 1若 cur 节点存在左子树,那么 cur = cur.left,继续和 node 比较
  2. 如果 node.val > cur.val + 500,则node应该插入到cur节点的右子树中,若 cur 节点不存在右子树,那么 node 就作为 cur 节点的右子树根节点,且node.height = cur.height + 1若 cur 节点存在右子树,那么 cur = cur.right,继续和 node 比较
  3. 其他情况,则 node 应该插入到 cur 节点的中子树中,若 cur 节点不存在中子树,那么 node 就作为 cur 节点的中子树根节点,且且node.height = cur.height + 1若 cur 节点存在中子树,那么 cur = cur.mid,继续和 node 比较

在上面比较过程,始终保留最大的node.height作为tree.height。

import Foundation

func ODTest_64() {
    print("第一行为一个数 N,表示有 N 个数,1 ≤ N ≤ 10000")
    let N = Int(readLine() ?? "") ?? 0
    print("第二行为 N 个空格分隔的整数,每个数的范围为[1,10000]")
    let nums = (readLine() ?? "").split(separator: " ").map { Int($0) ?? 0 }
    print("输出树的高度(根节点的高度为1)")

    let tree = Tree()
    for i in 0 ..< N {
  

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试卷题 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论
华为OD统一考试 - 计算三叉搜索树的高度
点赞 回复 分享
发布于 2024-09-20 21:04 四川

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
(黑话警告⚠️:hc=岗位数量,&nbsp;mt=导师,&nbsp;ld=直属领导,&nbsp;cr=代码审查)25年1月,我加入了字节某前端团队,并期望能在这里待到秋招并尝试转正。然而,就在上周,ld&nbsp;找我1v1,告诉我,我的能力和团队预期不太匹配,并和我劝退。晴天霹雳吗?肯定是有的。那一刻,脑子里嗡嗡作响,各种情绪翻涌。但冷静下来想想,这几个月,自己在能掌控的范围内,确实有不少地方做得不尽如人意。所以,我想把这段不算成功的经历复盘一下,希望能给同样在努力转正的你提个醒,避开我踩过的坑。一、ld&nbsp;的要求要注意刚进组时,ld就和我聊过转正的事。我当时发问:“咱们这儿有hc&nbsp;吗?”&nbsp;ld没直接回答,只是说:“看能力,能力到了...
牛客上的彭于晏:过来人告诉你,入职后要做的第一件事儿不是说主动找活儿做,你要先学会融入团队,摸清ld的性格,投其所好。然后才是展示你的能力,能力上可以说技术或者业务,以业务能力为主,技术能力为辅。优先保证自己对业务需求的开发保证质量效率,然后再谈技术的问题,不要你觉得啥啥啥不行就想着整体优化了(发现校招生最喜欢干这事儿),我工作快5年了发现搞这种的最后都没啥好的结果,产出没有还引入新的bug,校招或者实习的水平看到的问题别人看不到嘛?为什么别人不去搞?浪费时间还没收益的事儿不要去做,技术上的能力体现在对于一个新需求,在不符合现在业务发展的架构设计上,你能拿出好的技术方案同时能考虑到后续业务发展逐渐将技术架构引入合理的架构,这是一个漫长的过程而不是一次性的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务