今天在复习计算机基础知识的过程中,看到很多年前的新闻。是关于Max Howell,他就是 Homebrew 的创作者。首先说说这款大名鼎鼎的Mac软件,它是一款适用于macos操作系统的开源软件包,允许用户使用命令行安装卸载各种开源软件包。而他本人是一名行业内知名的 MacOS / iOS 开发工程师,后来入职苹果公司。但是就是这么牛的人因为一个反转二叉树的问题而被谷歌拒绝。他本人发了这么一段话:
大致意思就是谷歌说:我们百分之九十的工程师都在用你写的Homebrew,但是你连二叉树的翻转都写不出来,所以滚蛋吧。
看到这,心里一惊,说实话虽然在大学学过二叉树,但是如果毫无准备去面试,让手写一段二叉树,那还真写不出来。这也说明基础知识肯定会是反映一个人能力的重要部分,尽管很多基础知识,貌似看起来实际中并不一定用得上。而且现在大厂面试也躲不了算法部分,有部分还是直接手写代码。尽管这个事看起来好像笑话,他本人也说过,尽管他不懂很多计算机科学,但是他可以创作出值得让人喜欢的作品。但是我相信这只是个例,毕竟他是一个很有计算机天赋的人,而我们是普通人,如果基础知识不过关,相信首先想进入一家大的公司都会比较困难。
借这个事,顺便复习下,什么是二叉树,以及二叉树如何翻转。
二叉树就是一种树形结构,由节点和连接这些节点的边组成。每个节点最多只有两个子节点,分别称为左子节点和右子节点,因此称之为“二叉”树。
二叉树翻转:顾名思义,就是二叉树所有的节点的左右子节点交换位置,这样,原来左子树变成右子树,右子树变成左子树。
下面是python实现二叉树翻转的代码:
# 定义二叉树的节点类 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right
定义二叉树翻转函数
def invertTree(root: TreeNode) -> TreeNode:
if not root:
return None
left = invertTree(root.left)
right = invertTree(root.right)
root.left, root.right = right, left
return root
先定义一个二叉树的节点类,包含值、左右子节点三个属性,在定义一个invertTree函数来翻转二叉树,使用递归方式翻转。
最后,我觉得,如果立志想成为一个技术牛人,该学学,基础知识需要深挖并巩固。当然如果只是打螺丝的,那就打好自己的螺丝,有空该复习还是多多复习,总有用上的一天!
END