翻转二叉树
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
题解:从根节点开始,递归地对树进行遍历,并从叶子结点先开始翻转。如果当前遍历到的节点 root的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。
class Solution {
public TreeNode invertTree(TreeNode root) {
return swap(root);
}
public TreeNode swap(TreeNode root){
if (root == null) {
return null;
}
TreeNode left = swap(root.left);
TreeNode right = swap(root.right);
root.left = right;
root.right = left;
return root;
}
}