题目:
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
思路:
1.层次遍历,左右子树交换
2.递归
方法1层次遍历:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
#迭代,层次遍历
#递归
queue=[root]
while queue and root:
cur_node=queue.pop(0)
if cur_node.left:
queue.append(cur_node.left)
if cur_node.right:
queue.append(cur_node.right)
tmp=cur_node.left
cur_node.left=cur_node.right
cur_node.right=tmp
return root
方法2:递归
if root: #终止条件
left=self.invertTree(root.left)
right=self.invertTree(root.right)
root.left=right
root.right=left
return root
或者这样:
if root:
root.left = self.invertTree(root.left);
root.right = self.invertTree(root.right);
tmp = root.left;
root.left = root.right;
root.right = tmp;
return root