import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    public TreeNode Mirror (TreeNode pRoot) {
        // write code here
        if(pRoot == null){
            return null;
        }
        Queue<TreeNode> we = new LinkedList<TreeNode>();
        Queue<TreeNode> you = new LinkedList<TreeNode>();
        TreeNode newroot = new TreeNode(pRoot.val);
        TreeNode ow;
        TreeNode oy;
        we.offer(pRoot);
        you.offer(newroot);
        while(true){
            ow = we.poll();
            oy = you.poll();
            
            if(ow.left != null ){
                we.offer(ow.left);
                oy.right = new TreeNode(ow.left.val);
                you.offer(oy.right);
            }
            if(ow.right != null ){
                we.offer(ow.right);
                oy.left = new TreeNode(ow.right.val);
                you.offer(oy.left);
            }
            if(we.isEmpty()){
                break;
            }
        }
        return newroot;
    }
}