- 题目描述:
- 设计思想:
详细操作流程看下图:
-视频讲解链接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)
京公网安备 11010502036488号