剑指LeetCode 剑指offer27

本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!

第23道问题 剑指offer 27为一道简单题

题目:

力扣剑指LeetCode 剑指offer27https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/剑指LeetCode 剑指offer27 

1.自己思考

从图中可以看出,镜像指的是根节点不变,左节点和有节点互换。

之前考虑用分段法处理,每一段代表树的每一层,但这种方法限制太多,尤其是子树不存在的情况下。

采用递归实现比较好,出口就是跟节点没有了。

class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if(root == null){
            return null;
        }
        //左右节点分别调用镜像方法
        TreeNode left = mirrorTree(root.right);
        TreeNode right =mirrorTree(root.left);
        //之后交换
        root.left = left;
        root.right = right;
        return root;

    }
}

结果:

剑指LeetCode 剑指offer27

2.查看题解

发现有人利用栈的辅助,同样实现了二叉树的镜像 。

将根节点入栈,每次将左右节点互换,直至root为null结束。

class Solution {
    public TreeNode mirrorTree(TreeNode root) {
         if(root == null){
            return null;
        }
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode tt =stack.pop();
            if(tt.left != null){
                stack.push(tt.left);
            }
            if(tt.right != null){
                stack.push(tt.right);//进栈作为一个的根节点
            }
            TreeNode tmp = tt.left;//进栈作为一个的根节点
            tt.left =tt.right;
            tt.right = tmp;
        }
        
        return root;

    }
}

结果:

剑指LeetCode 剑指offer27

总结:

1.二叉树常用递归方法,本质上就是将一个大二叉树分成小二叉树运算。 

上一篇:混合背包


下一篇:学习笔记 2021.10.27