「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。
描述
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
备注: 这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
还是要好好刷算法啊,不然面试官想放水都放不了🤦
做题
我还没做之前觉得还是挺难的,做完之后觉得不过如此。
如果是只有一个根节点,再加两个叶子节点,如下。
4
/ \
2 7
那么我们直接对调左右子节点就可以了。
4
/ \
2 7
/ \ / \
1 3 6 9
那再给 2,7 增加左右子节点,那它们的处理跟只有一个根节点的处理是一样的。
所以我们只需要对调当前节点的左右子节点,然后再把左右子节点分别丢进自身的方法去,让它们各自对调自己的左右子节点。
public TreeNode invertTree(TreeNode root) {
if(root == null){
return root;
}
//翻转
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
//递归翻转左右子节点
invertTree(root.right);
invertTree(root.left);
return root;
}
最后
这道题真的是放水题啊,不能不会啊。
不刷刷算法,公司想放水都放不了,算法通胀时代到来了。原来都可以不刷的,但有人刷了,有了优势,于是人人都刷了。
今天就到这里了。
这里是程序员徐小白,【每日算法】是我新开的一个专栏,在这里主要记录我学习算法的日常,也希望我能够坚持每日学习算法,不知道这样的文章风格您是否喜欢,不要吝啬您免费的赞,您的点赞、收藏以及评论都是我下班后坚持更文的动力。