经典面试题(十六)--二叉树的镜像

Posted 算法和数据结构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典面试题(十六)--二叉树的镜像相关的知识,希望对你有一定的参考价值。

来源:LeetCode

难度:简单

描述:

        请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

镜像输出:

经典面试题(十六)--二叉树的镜像


示例1:

经典面试题(十六)--二叉树的镜像


分析:

        这是一道很经典的二叉树问题,首先咱们需要了解二叉树镜像的定义:对于对于二叉树中任意节点 root ,设其左 / 右子节点分别为 left, right ;则在二叉树的镜像中的对应 root节点,其左 / 右子节点分别为 right,left 。用一句话来描述其实就是针对二叉树任意节点,将其左右子节点交换后的结果就是镜像树    

        如图:

经典面试题(十六)--二叉树的镜像

        老规矩,这里介绍深度优先遍历和广度优先遍历两种方法来解题


解题

方法一:深度优先遍历(递归)

思路:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转得到镜像。

        如果当前遍历到的节点root 的左右两棵子树都已经翻转得到镜像,那么我们只需要交换两棵子树的位置,即可得到以root 为根节点的整棵子树的镜像。


代码:

 1public TreeNode mirrorTree(TreeNode root) {
2    if (root == null) {
3        return null;
4    }
5    //翻转左节点
6    TreeNode left = mirrorTree(root.left);
7    //翻转右节点
8    TreeNode right = mirrorTree(root.right);
9    //左右翻转完毕,左右子节点进行交换即可
10    root.left = right;
11    root.right = left;
12    return root;
13}

时间复杂度:O(n) n是节点个数

空间复杂度:O(n) 


方法一:广度优先遍历

思路:先将根节点放入到队列中,然后不断的迭代队列中的元素。对出队的每个元素调换其左右子树的位置,然后:

  • 判断其左子树是否为空,不为空就放入队列中

  • 判断其子树是否为空,不为空就放入队列中

  • 之后对队列的元素重复如上操作即可


代码:

 1public TreeNode mirrorTree(TreeNode root) {
2    if(root==null) {
3        return null;
4    }
5    //将二叉树中的节点逐层放入队列中,再迭代处理队列中的元素
6    LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
7    queue.add(root);
8    while(!queue.isEmpty()) {
9        //每次都从队列中拿一个节点,并交换这个节点的左右子树
10        TreeNode tmp = queue.poll();
11        TreeNode left = tmp.left;
12        tmp.left = tmp.right;
13        tmp.right = left;
14        //如果当前节点的左子树不为空,则放入队列等待后续处理
15        if(tmp.left!=null) {
16            queue.add(tmp.left);
17        }
18        //如果当前节点的右子树不为空,则放入队列等待后续处理
19        if(tmp.right!=null) {
20            queue.add(tmp.right);
21        }
22    }
23    //返回处理完的根节点
24    return root;
25}

时间复杂度:O(n) n是节点个数

空间复杂度:O(n) 


以上仅是个人思路解法,觉得还不错欢迎点赞关注分享


往期精彩推荐




扫描下方二维码,关注公众号,更多精彩等你发现



以上是关于经典面试题(十六)--二叉树的镜像的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer:面试题19二叉树的镜像

剑指Offer面试题27. 二叉树的镜像

剑指offer 面试27题

剑指offer-面试题27-二叉树的镜像-二叉树

[剑指offer]面试题19:二叉树的镜像

剑指offer面试题27. 二叉树的镜像