面试必备:手撕代码集锦——平方根计算与二叉树深度探索

需积分: 32 68 下载量 182 浏览量 更新于2024-09-05 2 收藏 180KB PDF 举报
"面试手撕代码整理,涵盖了求平方根、反转链表、辗转相除法求最大公约数以及计算二叉树深度等常见算法题目。" 在这份资源中,整理了几个在面试中可能会遇到的编程问题及其解决方案。首先,我们来看求一个数平方根的算法。这里采用的是牛顿迭代法,通过不断逼近目标值来计算平方根。初始化一个猜测值`c`等于输入的数`x`,然后用`c`和`x/c`的平均值作为新的猜测值,直到旧的猜测值与新的猜测值之间的差小于0.000001为止。最后返回整数部分的`c`作为结果。 接下来是二叉树深度的计算。有两种方法,一种是递归,另一种是非递归。递归版本的算法首先检查树是否为空,如果为空则返回0。若非空,递归计算左子树和右子树的深度,取较大者加1作为当前树的深度。非递归版本使用广度优先搜索(BFS)策略,初始化一个队列,将根节点入队。在循环中,每处理完一层的节点,深度加1,并将未处理的子节点加入队列。当队列为空时,所有节点都被处理,返回当前的深度。 辗转相除法(欧几里得算法)用于求最大公约数,但在这个资源中没有给出具体的代码实现。基本思路是:对于两个正整数a和b,若a除以b的余数为0,则b是它们的最大公约数;否则,用b去除a的余数,再用这个余数去除b,如此反复,直到余数为0,最后的除数即为最大公约数。 反转链表的问题也没有在给定的代码中出现,但通常的解法是通过迭代或递归,改变相邻节点的指向关系,直到遍历完整个链表,达到反转的效果。 这些题目涵盖了基础算法和数据结构,对于面试者来说,理解和掌握这些内容能够提升解决问题的能力,也是面试中常见的考察点。通过手撕代码的方式,可以更好地锻炼编程思维和逻辑能力。