LeetCode 226 翻转二叉树
给你一棵二叉树的根节点
root
,翻转这棵二叉树,并返回其根节点。示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2:
输入:root = [2,1,3] 输出:[2,3,1]示例 3:
输入:root = [] 输出:[]
这道题可以用递归和层序遍历。
递归又分为前序和后序。
我们先看前序的代码:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null)
return null;
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
前序是从根节点开始向叶节点的,是自顶向下的。先处理当前节点,再处理子节点。
而后序是先处理子节点,再处理当前节点,是自下而上的。
后序的代码:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null)
return null;
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
}
而层序遍历的做法是,让左右孩子先反转再入队。
代码:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null)
return null;
Deque<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode tmp = queue.remove();
TreeNode left = tmp.left;
tmp.left = tmp.right;
tmp.right = left;
if(tmp.left != null)
queue.add(tmp.left);
if(tmp.right != null)
queue.add(tmp.right);
}
return root;
}
}