有一个让程序员心酸的故事,听说Homebrew的作者MaxHowell,就是因为没有在白板上写出翻转二叉树,最后被谷歌拒绝了,本文将介绍如何翻转二叉树。
二叉树是一种非常基础且主要的数据结构,而翻转二叉树是二叉树类题目中非常经典的一套,虽然简单,但是可以很好的检验大家的算法基础,翻转二叉树的详情如下,即将左边的二叉树翻转为右边的二叉树。
一.思路
二叉树的遍历方式分为广度优先和深度优先遍历,这里我们可以采用广度优先搜索BFS的方式来遍历整棵树,并且通过在每次遍历时,交换每个节点的左右子节点,进而实现翻转。
二.代码
根据以上思路,代码如下:
def invertTree(root):
if root is None:
return None
queue=collections.deque([root])
while len(queue)>0:
cur_node=queue.popleft()
if cur_node is not None:
cur_node.left,cur_node.right=cur_node.right,cur_node.left
queue.append(cur_node.left)
queue.append(cur_node.right)
return root
三.递归法实现翻转二叉树
以上是迭代法实现二叉树翻转的代码,除此之外,使用递归的方法也可以实现翻转二叉树的功能,代码如下:
def invertTree(root):
if root is None:
return None
invertTree(root.left)
invertTree(root.right)
root.left,root.right=root.right,root.left
return root
由于实现二叉树的翻转相对简单,所以有很多种方法都可以实现同学们可以自习比较迭代法和递归法的区别,以及分别使用前序遍历,中序遍历,后续遍历的方法实现二叉树的翻转,这里就不过多介绍了。