题目描述

操作给定的二叉树,将其变换为源二叉树的镜像。

输入描述:

二叉树的镜像定义:源二叉树

      8
       /  \
      6   10
     / \  / \
    5  7 9 11
    镜像二叉树
        8
       /  \
      10   6
     / \  / \
    11 9 7  5

答案

public class Solution {
    public void Mirror(TreeNode root) {
     if(root != null){
        if(root.left!=null || root.right!=null){
                Mirror(root.left);
                Mirror(root.right);
        }
        TreeNode t = null;
        t = root.left;
        root.left = root.right;
        root.right = t;
       }
    }
}

解析

第一想法是使用递归解决,需要进行两路判断,重复递归到底层,关键问题在于结束的点怎么判断,我这里的代码是对两路判断比较放松,用的或进行判断,可能导致空指针异常,所以要在整体代码上加上一个root指针是否为空的判断。

另外注意,即使进行双路比较严格的判断,对左路右路都进行非空判断,仍然要加上这个判断,因为有可能直接给一个空树


醉后不知天在水,满船清梦压星河