题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
递归法
交换每个结点左右孩子,递归调用此方法
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public void Mirror(TreeNode root) {
if(root==null)
return;
TreeNode m = null;
if(root!=null){
m = root.left;
root.left = root.right;
root.right = m;
Mirror(root.left);
Mirror(root.right);
}
}
}
非递归法
层次遍历
交换当前结点的左右子树
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public void Mirror(TreeNode root) {
if(root == null)
return;
Queue<TreeNode> q = new LinkedList<>();
TreeNode p = null;//当前出队结点
TreeNode cur = null;
//层次遍历,交换左右子树
//根节点入队,//入队 q.offer()
q.offer(root);
while(!q.isEmpty())
{
//出队,q.poll()-返回第一个元素,并删除,入队其左右子树
p = q.poll();
//交换左右结点
cur = p.left;
p.left = p.right;
p.right = cur;
//左右不空的入队
if(p.left!=null)
q.offer(p.left);
if(p.right!=null)
q.offer(p.right);
}
}
}