题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
分析
观察输入描述中的案例,我们不难发现,所谓的二叉树的镜像,实际上就是把树中每个节点的左右孩子节点进行交换(如果存在孩子节点的话)。那么很容易想到使用递归的方法来实现。
代码:
public void mirror(TreeNode root){
if(root == null){
return;
}
//交换左右孩子节点
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
//递归交换左右孩子节点
mirror(root.left);
mirror(root.right);
}
除了递归方法,当然也有非递归的做法,这时需要借助一个辅助栈,上代码
public void mirror(TreeNode root){
if(root == null){
return;
}
//临时temp变量,用于交换
TreeNode temp = null;
//当前节点
TreeNode current = null;
//创建辅助栈
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
current = stack.pop();
if(current.left !=null || current.right != null){
temp = current.left;
current.left = current.right;
current.right = temp;
}
if(current.left !=null){
stack.push(current.left);
}
if(current.right != null){
stack.push(current.right);
}
}
}