分析:翻转二叉树用递归的思路很好想,用前序遍历或后序遍历的方式都可以,但中序遍历不行,因为中序遍历会重复调换左子树。

    递归法:
    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 = new 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;
    }

    栈: