小米笔试-二叉树

这是一道关于二叉树的招聘笔试题目,要求根据输入的父子关系数据,计算给定二叉树的高度。文章提到了两种解决方案:一是使用指针结构体表示节点关系,但实现起来较为复杂;二是使用二维数组表示,适用于节点数较小的情况,数组大小为1001*2,通过遍历判断左右孩子是否存在来寻找树的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一棵合法的二叉树,共有n个节点(1<=n<=1000),节点编号为(0~n-1),给定节点间的父子关系,求树的高度。

输入:第一行一个整数n,接下来有n-1行。每行两个整数,以空格分隔,第一个表示父节点编号,第二个表示子节点编号。

输出:树的高度

样例输入:

5
0 1
0 2
1 3
1 4
样例输出

3

这个题的关键是树的表示,其次是求树的高度:

(1)定义结构体用指针表示二叉树间节点关系

规规矩矩定义结点结构,构建一棵树,同时用指针数组存储下每个节点的地址,一遍为他添加孩子节点时能迅速找到。这个方法要完完整整写下来估计耗时不少。



(2)用数组表示

数组表示可能有多种,先说一维数组,当节点数目比较小时,可以考虑用完全二叉树的那种数组表示,2*n为左孩子,2*n+1为右孩子。但是有个巨大的问题是数组开多大,事实上当节点数为20的时候,数组就需要1024*1024这么大了,所以对于此题这种解法不可取(坑爹的我直接用的这个)

二维数组1001*2,我们可以用数组下标代表节点,每个节点2个单元,第一个单元表示左孩子下标,第二个单元表示右孩子单元。每次先存放左孩子单元,再存放右孩子。如果不存在就是-1。这样的话如tree[i][0]!=-1代表有左子树,tree[i][1]!=-1代表存在右子树,不断遍历,直到遇到-1为止。


下面给出用二维数组的方法




#include<iostream>
#include<string.h>
#include<cstdio>
#
<think>好的,我现在需要帮用户解决关于小米公司软件研发岗位笔试的题目准备和知识点的问题。首先,用户提供了几个引用资料,我需要仔细看看这些资料中的相关内容,然后结合自己的知识来整理回答。 首先,引用[1]提到小米的秋招面试题,里面强调了嵌入式岗位必须掌握的几个函数,尤其是内存管理相关的题目,比如memcpy、strcpy这些。虽然用户问的是软件研发岗位,但嵌入式也属于软件研发的部分,所以这部分内容可能相关。此外,还提到大华和mtk也考过类似题目,说明内存管理在嵌入式系统中确实重要。 引用[2]讲的是大疆的笔试,提到技术栈深,对学历要求高。虽然是大疆,但可以推测小米作为科技公司,可能对数据结构、算法、系统设计等方面有较高要求,尤其是研发岗位。 引用[3]来自剑指Offer和携程的笔试总结,强调技术面试是双向了解,要准备项目经验,并且面试时提问的重要性。这可能提示用户在准备笔试的同时,也要注意面试中的互动,但用户现在主要关注笔试内容,所以这部分可能暂时次要,但需要提及项目经验和实战能力。 接下来,我需要整理小米软件研发笔试可能涉及的知识点。根据常见的软件研发笔试内容,般包括数据结构与算法、编程语言(如C/C++、Java)、操作系统、计算机网络、数据库、系统设计等。结合引用中的信息,特别是嵌入式相关的内存管理,可能C/C++是重点,尤其是指针、内存操作函数。 用户可能需要知道具体准备资料,比如推荐书籍《剑指Offer》《程序员面试金典》,以及LeetCode刷题。此外,项目经验也是重点,需要复习自己做过的项目,尤其是与目标岗位相关的部分。 需要确认是否有小米特定的题型或常考题目。根据引用[1],小米考过memcpy、字符串处理,所以这些题目需要重点准备。此外,递归、排序算法(如快速排序)也可能出现,比如示例中的快速排序代码,可能在笔试中要求手写或分析。 可能还需要考虑操作系统中的进程线程、同步机制,网络中的TCP/IP、HTTP,数据库的SQL和优化等。系统设计题可能涉及分布式系统或架构设计,但不确定小米是否常考这类题,但准备基础还是有必要的。 总结下来,回答的结构应该是先分知识点,再讲准备方法,最后推荐资料。同时,引用相关的引用内容来支持,比如引用[1]提到memcpy等必考题,引用[3]强调项目经验和面试技巧。 需要确保回答符合用户要求的结构,即帮助用户逐步解决问题,保持真实可靠。同时,生成相关问题,比如笔试常见题型、如何准备项目经验、算法题的策略等。 最后检查是否符合系统级指令:使用正确的中文,数学公式用$...$,独立公式用$$...$$,但当前问题可能不涉及太多数学公式,但如果有算法复杂度分析,需要正确格式。引用标识要正确添加在相关段落末尾。</think>根据小米公司软件研发岗位的笔试特点及业通用要求,以下是针对性的准备指南: --- ### 、核心知识点梳理 1. **数据结构与算法** - **必考内容**:链表操作、二叉树遍历(前序/中序/非递归)、排序算法(快速排序、归并排序)、动态规划(背包问题、最长子序列) - 示例题目:手写非递归快速排序(参考示例代码)、实现二叉树镜像翻转 - **复杂度分析**:例如快速排序平均时间复杂度为$O(n \log n)$,最坏情况$O(n^2)$[^1] 2. **编程语言(C/C++为主)** - **指针与内存管理**:实现`memcpy`、`strcpy`等函数(嵌入式岗位必考[^1]) - **多线程与同步**:互斥锁、信号量的使用场景 - **代码调试**:分析指针越界、内存泄漏等问题 3. **操作系统与网络基础** - **进程与线程**:区别、通信方式(管道/共享内存) - **TCP/IP协议**:三次握手、流量控制机制 - **Linux命令**:`grep`、`awk`文本处理,进程查看命令`ps` 4. **系统设计能力** - **场景题**:设计分布式ID生成器、缓存机制(如LRU实现) - **数据库优化**:索引原理、SQL查询优化 --- ### 二、准备方法与资料推荐 1. **刷题与实战** - **推荐平台**:LeetCode(重点刷**Hot 100**和**剑指Offer**题目)、牛客网(小米真题库) - **高频题型**:字符串处理(如KMP算法)、递归转迭代优化 2. **项目经验复盘** - 梳理1-2个与目标岗位匹配的项目,重点说明技术难点与解决方案(如高并发场景优化[^3]) - 准备**STAR法则**描述:情境(Situation)、任务(Task)(Action)、结果(Result) 3. **模拟笔试训练** - 使用赛码网、牛客网进限时模拟,熟悉**ACM模式**输入输出处理 - 注意代码规范:变量命名、异常处理、边界条件检查 --- ### 三、小米笔试特点与注意事项 1. **嵌入式相关题目**:如内存对齐、寄存器操作等(尤其关注C语言底层能力) 2. **算法优化倾向**:小米笔试常考察时间/空间复杂度的极致优化,例如将$O(n^2)$算法优化至$O(n)$ 3. **软技能考察**:部分题目会要求注释代码逻辑或简述设计思路,体现沟通能力[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值