描述
操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000
要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)
原树
镜像
思路:
镜像只需要 树在入队时候 先右节点再左节点 入队就行了
新增一个q2队列存储新树的节点。
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 pRoot;
Queue<TreeNode> q=new LinkedList<>();
Queue<TreeNode> q2=new LinkedList<>();//存新树的节点,方便取出
TreeNode newRoot=new TreeNode(pRoot.val);
TreeNode tmp1;
TreeNode tmp2;
q.add(pRoot);
q2.add(newRoot);
while(!q.isEmpty()){
tmp1=q.poll();
tmp2=q2.poll();
if(tmp1.right!=null){
q.add(tmp1.right);
tmp2.left=new TreeNode(tmp1.right.val);
q2.add(tmp2.left);
}
if(tmp1.left!=null){
q.add(tmp1.left);
tmp2.right=new TreeNode(tmp1.left.val);
q2.add(tmp2.right);
}
}
return newRoot;
}
}