题目描述:
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
题解:
解法一:
将左右结点翻转,递归变换。
public void Mirror(TreeNode root) {
if(root == null){
return;
}
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
Mirror (root.left);
Mirror (root.right);
}
解法二:
(1)利用队列,层序遍历二叉树。
(2)先将根结点入队列.
(3)在队列不为空的情况下,队首元素出列。
(4)将当前出队列的结点的左右子树结点交换,并入队列。
(5)执行步骤3,直至队列为空。
10 和 6 进入队列
继续循环此部分代码,最终得到的二叉树就是源二叉树的镜像二叉树
public void Mirror(TreeNode root) {
if(root == null){
return;
}
Queue<TreeNode> queue = new LinkedList<> ();
queue.offer (root);
TreeNode cur = null;
TreeNode tmp = null;
while(!queue.isEmpty ()){
for(int i = 0; i < queue.size ();i++){
cur = queue.poll ();// 队首元素出列
tmp = cur.left;
cur.left = cur.right;
cur.right = tmp;
if(cur.left != null){
queue.offer (cur.left);
}
if(cur.right != null){
queue.offer (cur.right);
}
}
}
}