分析:翻转二叉树用递归的思路很好想,用前序遍历或后序遍历的方式都可以,但中序遍历不行,因为中序遍历会重复调换左子树。
递归法:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null) return null;
invertTree(root.left);
invertTree(root.right);
TreeNode tmp=root.left;
root.left=root.right;
root.right=tmp;
return root;
}
分析:迭代法用栈或层序遍历都可以
层序遍历:
public TreeNode invertTree(TreeNode root) {
if(root==null) return root;
ArrayDeque
queue.offer(root);
while(!queue.isEmpty()){
int size=queue.size();
while(size>0){
TreeNode node = queue.poll();
swap(node);
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
size—;
}
}
return root;
}
private void swap(TreeNode node){
TreeNode tmp = node.left;
node.left=node.right;
node.right=tmp;
}
栈:
