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