一、题目
————————————————
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
图片说明
————————————————
二、思路
————————————————
画图可以很清晰地得到思路:先前序遍历,对每个结点交换左右子结点。
————————————————
三、解决问题
————————————————
测试算例 

  1.功能测试(普通二叉树;左斜树;右斜树;一个结点)

  2.特殊测试(根结点为null;)
————————————————

package swordoffer;

/**
 * @author LQ
 * @version 1.0
 * @date 2020-04-06 14:11
 */

import java.util.ArrayList;
import java.util.LinkedList;

/**
 * 请完成一个函数,输入一个二叉树,该函数输出它的镜像。
 */

public class Solution21 {
    public static void main(String[] args) {
        Solution21 demo = new Solution21();
        System.out.println("==============================");
        demo.test1();
        System.out.println("==============================");
    }
    public void Mirror(TreeNode root) {
        if(null == root){
            return;
        }
        swap(root);
        Mirror(root.left);
        Mirror(root.right);
    }
    //左右子结点交换
    private void swap(TreeNode root){
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer>list=new ArrayList<>();
        if(root==null)
            return list;
        LinkedList<TreeNode>lay=new LinkedList<>();
        lay.add(root);
        while(!lay.isEmpty()){
            root=lay.poll();
            if(root.left!=null)
                lay.add(root.left);
            if(root.right!=null)
                lay.add(root.right);
            list.add(root.val);
        }
        return list;
    }
    //=====================测试代码=======================
    /*
     * 1.功能测试(A、B为普通二叉树;B是或者不是A树的子结构)
     * 2.特殊测试(任意一个或者两个树的根结点为null;左斜树;右斜树)
     */
    void test1() {
        TreeNode root = new TreeNode(1);
        root.right = new TreeNode(3);
        root.left = new TreeNode(2);
        System.out.println(PrintFromTopToBottom(root));
        Mirror(root);
        System.out.println(PrintFromTopToBottom(root));

    }
}

图片说明
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。