《剑指Offer》Java刷题 NO.18 二叉树的镜像(二叉树镜像、递归)
传送门:《剑指Offer刷题总目录》
时间:2020-02-27
题目:
操作给定的二叉树,将其变换为源二叉树的镜像。
思路:
很明显镜像二叉树是原二叉树一层一层的进行左右子树交换得来的,直到叶子结点;要注意的是,就算左右子树中有一个是空的也需要交换
递归过程:
- 把左右子树交换,然后递归的把左子树和右子树都搞成镜像二叉树;
- 结束条件就是当前根结点为null
Java代码:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
TreeNode() {
}
}
/**
* 操作给定的二叉树,将其变换为源二叉树的镜像。
*/
public class MirrorTree {
public static void mirrorTree(TreeNode root){
if(root==null) return;
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;//一定要交换结点才是交换了左右子树,如果仅仅是交换的val的话,底下的结构不会跟着改变
if(root.left!=null)
mirrorTree(root.left);
if(root.right!=null)
mirrorTree(root.right);
//如果没有这两个判断语句的话,就算某个子树的根结点已经是null了,也还是会再执行一次函数
//虽然直接return了,也尽力了压栈和出栈,比较两者的空间和时间消耗,还是判断一下吧
}
}