【面试题】树的高度

数据结构之高度平衡搜索树AVL树(含经典面试题----判断一棵树是否是AVL树) 什么是AVL树 如何创建一个红黑树 满足二叉搜索树 满足红黑树的性质 红黑树的插入 左旋 右旋 阅读详情

题目来自:陈利人老师的微博和微信!

给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。能够在O(n)的时间复杂度,O(1)的空间复杂度要求下完成么?

思路:

如果现在我们有一个树的表示如下

[-1,0,0,1,0,2,1,4,2,7,6,7,10]

可见树的根为0.而1的父亲结点为0,而0为根结点。更多:3的父亲结点是1,而1的父亲结点是0,而0是根节点。所以我们可以得到下面的代码:

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  int father[13] = {-1,0,0,1,0,2,1,4,2,7,6,7,10};
  int len[13] = {0};
  for(int i = 0; i < 13; i++){
      int j = i;
      while(father[j] != -1){
        j = father[j];
        len[i] ++;
      }
  }
  for(int i = 0; i < 13; i++)
     cout << len[i] << " ";
  cout << endl;
  system("PAUSE");	
  return 0;
}
得到的结果是:0 1 1 2 1 2 2 2 2 3 3 3 4

则进行一次排序可以得到结果。

反思路:如果某一数在原father数组没有出现,则该数所对应的结点为叶子结点,反过来求也是可以的。

那么是否能够继续改进呢?通过上面的计算过程,我们可以发现,在计算4->2->3->-1的时候,显然2->3->-1已经计算过了,不需要再浪费时间重新计算一遍。示例代码如下:

#include <iostream>
#include <stdlib.h>

using namespace std;

int father[13] = {-1,0,0,1,0,2,1,4,2,7,6,7,10};
int len[13] = {0};

int curlen(int i){
   if(father[i] == -1)
   return 0;
   else{
      if(len[father[i]] != 0)
        return len[father[i]] + 1;
      else
        return curlen(father[i]) + 1; 
   }
}
int main(int argc, char *argv[])
{
  for(int i = 0; i < 13; i++){
    len[i] = curlen(i);
  }
  for(int i = 0; i < 13; i++){
    cout << len[i] << " ";
  }
  cout << endl;
  system("PAUSE");	
  return 0;
}
陈老师的代码:




现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度 输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号 输出描述: 输出树的高度,为一个整数 立即下载

相关推荐

GprMax正演模拟:为什么你的反射波‘消失’了?可能是直达波在捣鬼(附Python后处理脚本)

本文深入探讨了GprMax正演模拟中反射波信号被直达波淹没的现象,并提供了Python后处理脚本的实战指南。通过时域置零、自适应增益控制、频域滤波等多种技术,有效增强反射波信号,帮助用户解决探地雷达模拟中的常见问题。文章还包含详细的代码示例和效果评估方法,适合GPR数据处理的研究人员和工程师参考。

weixin_29305313的博客 232

2017 小米笔试题 编程题 求树的高度 Java代码实现

题目:树的高度 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 现在有一棵合法的二叉树,树的节点都是用数字表示, 现在给定这棵树上所有的父子关系,求这棵树的高度 输入 输入的第一行表示节点的个数n(1 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点

方丈的博客 4791

STM32G0实战:手把手教你用国产GD25Q16 Flash存储传感器数据(附完整驱动)

本文详细介绍了如何使用国产GD25Q16 Flash芯片与STM32G0系列MCU实现传感器数据存储的完整方案。从SPI接口配置、驱动层实现到存储系统架构设计,提供了实战代码和优化策略,帮助开发者快速构建高性价比的物联网数据存储系统。

weixin_30733003的博客 106

牛客网-树的高度(小米)

题目描述 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度 输入描述: 输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号 输出描述: 输出树的高度,为一个整数 示例1 输入 5 0 1 0 ...

weixin_30820151的博客 424

VisionMaster图像源模块的5个隐藏功能:从自动切换到二次开发接口

本文深入解析了VisionMaster图像源模块的5个隐藏功能,从基础的自动切换与字符触发过滤,到高级的脚本扩展与基于COM组件的二次开发接口。这些功能能显著提升工业视觉项目的自动化水平、灵活性与系统集成能力,帮助开发者实现更高效的离线测试流水线和外部精确控制。

rgv23456789的博客 651

【openGauss实战1】openGauss基于CentOS8的部署

基于openGauss数据库在CentOS8上的安装实践。

IT邦德 3050

2017校招真题编程训练--树的高度

时间限制:1秒 空间限制:32768K 热度指数:13869 算法知识视频讲解题目描述现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度输入描述:输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号输出描述:输出树的高度,为一个整数示例1...

pigofzhou的博客 658

人工智能面试总结-分类与聚类

目录说说常用的分类算法,以及各自的优缺点?说说为什么正确率有时不能有效评估分类算法?说说什么样的分类器最好?说说聚类算法有哪些衡量标准?(选看)各聚类算法性能比较汇总说说什么是聚类,你知道哪些聚类算法?具体展开介绍你知道的聚类算法?说说K-Means聚类算法流程?说说K-Means聚类算法如何调优?说说K-Means聚类算法如何选择初始点?说说K-Means聚类聚的是特征还是样本?说说K-Means聚类的特征距离是如何计算的?说说聚类与分类的区别?手撕K-Means聚类 说说常用的分类算法,以及各自的优缺点

啥都生的博客 3863

c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

题目描述现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度输入描述:输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号输出描述:输出树的高度,为一个整数示例1输入50 10 21 31 4输出3#include &lt;iostream&...

constantin_的博客 3227

uniapp - 解决App端报错reportJSException >>>> exception function:createInstanceContext, exception:white sc

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,uniApp报错,reportJSException>>>>exceptionfunction:createInstanceContext,exception:whitescreencausecreateinstanceContextfailed,运行自定义基座时白屏,uniapp项目运行白屏reportJSException,检查没问题依旧报错,第三方库插件,组件,uniapp打包调试

🏆 前端领域优质创作者 1万+

【unity小技巧】实现FPS射击游戏枪武器随镜头手臂摇摆效果(2025/12/11补充)

如果我们视角移动转向,武器如果不跟着进行摇摆,会感觉我们的动作很生硬,特别是射击类游戏,如下实现武器摇摆这里主要分享两种实现方法,一种是改变武器位置,一种是修改武器旋转想要使用哪种方法都可以,看你自己喜欢,如果是我,我会选择第二种,比较简单,参数也少,而且个人感觉效果也更好,已枪中心做旋转更符合现实。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1470

面试题之树的高度分析

树的高度分析 原题 有一个棵树,不一定是二叉树,有n个节点,编号为0到n-1。有一个数组A,数组的索引为0到n-1,数组的值A[i]表示节点i的父节点的id,根节点的父节点id为-1。给定数组A,求得树的高度。 分析 这个题目我们首先把数组写出来,然后进一步分析,就很明了了,如下例子: 3 3 3 -1 2 0

buaa_shang的专栏 1202

构建个体结构脑网络的另一种方法

这篇文献提出了一种构建个体结构脑网络的方法即Morphometric INverse Divergence (MIND),通过T1像数据即可对每个被试构建一个脑网络,且通过多个特征进行构建而非单一的特征。即可获得由4个特征得到的个体结构网络矩阵,可以根据自己的需求采用不同的特征组合得到网络矩阵,也可以结合T1/T2像得到髓鞘化相关的网络矩阵,后续可修改代码批量处理自己的数据。这是文献贴出来的代码。在终端直接克隆到本地。2.修改路径运行代码。

weixin_52073820的博客 822

[各种面试题] 树的最小高度

题目描述: 给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度。 输入: 输入可能包含多个测试案例。 对于每个测试案例,输入的第一行为一个整数n(1 接下n-1行,每行包括两个整数u,v( 0 输出: 对应每个测试案例,输出这棵树可能的最小高度。

a83610312的专栏 1930

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【面试题】MySQL B&#x2B;树索引高度计算

MySQL B+树索引高度计算与性能阈值探讨 一、MySQL B+树索引高度计算 MySQL中InnoDB的主键索引采用B+树结构,索引高度(树的层数)决定了查询时磁盘IO的次数(高度=IO次数),核心计算逻辑围绕B+树的节点容量和数据行数展开。 1. 核心前提(InnoDB默认配置) 页大小:默认

cmdos的专栏 52

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

mysql面试题:高度为3的B+树可以存放多少数据?

在Mysql中,B+树的每个节点都是一个数据页,数据页默认大小是16KB,非叶子节点存的是索引值以及页的偏移量,而叶子节点上存放的则是完整的每行记录。B+树是一颗多路平衡树,它的特点是通过减少非叶子节点的存储数据量以及增加树的分支数量,降低树的高度从而减少磁盘IO次数来提高数据检索性能。这个问题考察求职者对B+树存储特性的理解,求职者应该对B+树的基本原理和特点有一定的了解,并能够解释B+树的高度和存储容量之间的关系。同理,高度为3的B+树,就可以存放1170*1170*16=21902400条记录。

u013938578的博客 413

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【leetcode】 面试题 04.04. 检查平衡性 && 求树高度模板

检查树的平衡性,并提供了求树深度的模板

落雨碎江南 202

Python面试宝典第46题:乌托邦树

乌托邦树每年经历2个生长周期。每年春天,它的高度都会翻倍。每年夏天,他的高度都会增加1米。对于一颗在春天开始时种下的高为1米的树,问经过指定周期后,树的高度为多少?

hope_wisdom的技术博客 914

LeetCode 面试题55 - II. 平衡二叉树(树的高度的预处理、DFS)

在这篇博客平衡二叉树里,时间复杂为O(n∗n)O(n*n)O(n∗n) 原因是,每一次计算高度时,都要去遍历树。 如果用O(n)O(n)O(n)的时间去预处理,然后直接使用就好了。 下面是改进版。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x)

SongyangJi 264

【树-简单】面试题 04.02. 最小高度树(学习)

【题目】 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 【代码】 class Solution: def sortedArrayToBST(self, nums: List[int]) -> T

... 68

InnoDB一棵B+树可以存放多少行数据?

有一道MySQL的面试题,为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?现在这个问题的复杂版本可以参考本文;他的简单版本回答是:因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;本文从一个问题出发,逐步介绍了InnoDB索引组织表的原理、查询方式,并结合已有知识,回答该问题,结合实践来证明。

z1ztai的博客 1012

面试题 -- 树

总结一下,有关树的各种面试题。 我觉得自己算法基础很好,但是实际看来写代码的能力确实不好,在这方面做得也不好,本科没有怎么参加ACM,所以代码训练很少,以后多多训练吧。1.非常好的总结帖 2. 用各种遍历顺序求取树的高度 3. 如何求取一个序列的所有排列组合?采用递归 4. 希尔排序

xiaorenwuzyh的专栏 542

面试题 04.02. 最小高度树-深度优先遍历,加树的分治法

面试题 04.02. 最小高度树-深度优先遍历,加树的分治法 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 这题其实需要一些技巧的,分治法,是需要用到的 解题代码如下: /** * Definition fo

weixin_43327597的博客 110

面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

点击上方“方志朋”,选择“设为星标”做积极的人,而不是积极废人来源:https://dwz.cn/exC8JdQSInnoDB的一棵B+树可以存放多少行数据?答案:约2千万为什么是这么多?...

方志朋的博客 68

一般树的遍历、合并及对比

普通树的遍历、合并及对比 普通树的遍历、合并及对比 题目描述 编程要求 解题分析 日常开发过程中,我们经常会碰到树这种数据结构,譬如权限树、区域层级树,系统调用链等等,今天想记录一下在某个面试题中碰到的关于树的算法题,通过对该题的解答巩固自身对于数据结构的理解,以及希望给有相同困惑的小伙伴以参考的作用。闲话不多说,我们来看题(如涉及到泄题,还请联系我予以删除) 题目描述 ...

Justnow_的博客 5391
上一篇: 【通切1】Quartz框架的使用
下一篇: 有趣的题目系列一:实现具有最大值、最小值、中间值的栈和队列
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值