- 题目描述:
图片说明

- 题目链接:
https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=117&&tqId=34994&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

- 设计思想:

图片说明
详细操作流程看下图:
图片说明

-视频讲解链接B站视频讲解

- 代码:
c++版本:

 /*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    void Mirror(TreeNode *pRoot) {
        if(pRoot){
        queue<TreeNode*>q; //创建一个队列用来存储节点
        q.push(pRoot); //根节点入队列
        while(!q.empty()){
            TreeNode* node = q.front(); //取出队首元素
            q.pop();
            //以下三步为交换元素类似于2个数的交换
            TreeNode* temp = node->left;
            node->left = node->right;
            node->right = temp;
            //将交换后的左右子树入队列
            if(node->left) q.push(node->left);
            if(node->right) q.push(node->right);
        }
    }

  }
};

Java版本:

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 {
    public void Mirror(TreeNode root) {
        if(root != null){
            Queue<TreeNode> q = new LinkedList<TreeNode>(); //创建一个队列用来存储节点
            q.add(root);//根节点入队列
            while(!q.isEmpty()){//如果队列不为空就进行如下操作
                TreeNode node = q.poll();//取出队首元素
                //以下三步为交换元素类似于2个数的交换
                TreeNode temp = node.left;
                node.left = node.right;
                node.right = temp;
                //将交换后的左右子树入队列
                if(node.left != null) q.add(node.left);
                if(node.right != null) q.add(node.right);
            }
        }



    }
}

Python版本:

import queue
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

#
# 
# @param pRoot TreeNode类 
# @return void
#
class Solution:
    def Mirror(self , pRoot ):
       if not pRoot: return
       q = queue.Queue() #创建一个队列用来存储节点
       q.put(pRoot) #根节点入队列
       while q.qsize() > 0:
            node = q.get() #取出队首元素
            #以下三步为交换元素类似于2个数的交换
            temp = node.left
            node.left = node.right
            node.right = temp
            #将交换后的左右子树入队列
            if node.left != None: q.put(node.left)
            if node.right != None: q.put(node.right)