226. 翻转二叉树
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
我觉得这道题叫做镜像二叉树应该也可以吧。
思路:首先想到的就是相当于一个镜像,而且是左右子树进行交换位置。代码就根据简单的树的遍历,借助于临时变量作为左右子树交换的媒介,然后递归。
先写树的遍历框架:
public TreeNode invertTree(TreeNode root) {
invertTree(root.left);
invertTree(root.right);
return root;
}
再添加交换子树的操作,位置放在哪要考虑这道题适合哪种遍历,其实前中后序遍历都可以。所以位置也可以随便。因为交换左右子树对根没有影响。
前序:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
TreeNode node = root.left;
root.left = root.right;
root.right = node;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
后序:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
invertTree(root.left);
invertTree(root.right);
TreeNode node = root.left;
root.left = root.right;
root.right = node;
return root;
}
}