动画:面试必刷之二叉树的镜像

点击蓝色 “小鹿动画学编程” 关注我哦!

加个 “星标” ,每天一篇动画喂饱你!

作者 |  小鹿

来源 |  小鹿动画学编程

题目

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

如下所示:

问题分析

根据题目的要求,求出一个二叉树的镜像。首先我们要知道什么是二叉树的镜像,我们通过上图可以得出,镜像就是二叉树的每层节点的左右子树进行相互交换。说白了就是除了根节点外,所有的结点中的左子节点的镜像是右子节点,右子节点的镜像变成了左子节点。

基本的问题我们弄明白了,下一步我们屡屡思路,开始动手实现二叉树的镜像。

因为每个具有非空节点的节点的左右子节点都要进行交换,所以我们可以用递归来解决。具体思路分析,我们看下方的解决思路。

动画实现

解决思路

首先,我们使用递归要找到递归的终止条件,不能一直往下递归呀,当我们遇到叶子节点的时候,我们就不用进行递归交换了。所以递归条件就是当前递归的节点是否为空。

1  if(root == null){
2         return;  
3    }

然后我们声明一个临时变量用来存储两个节点交换的值,然后进行左右子树交换。

1// 进行结点交换
2    Let tempNode = root.left;
3    root.left = root.right;
4    root.right = tempNode;

交换之后,我们直接递归剩下的节点进行交换就 OK。然后返回递归后的树的根节点。

1// 递归遍历剩余的子节点
2    insert(root.left);
3    insert(root.right);
4
5    // 返回根节点
6    return root;

代码实现

JavaScript

Java

Python

测试用例

  • 普通二叉树 —— 普通测试

  • 只有左子节点、只有右子节点、只有一个结点 —— 特殊测试

  • 空树 —— 输入测试

推荐阿里云推广服务器89/年,229/3年,买来送自己,,买了搭建个项目给面试官看也香,还可以熟悉技术栈,(老用户用家人账号买就好了,我用我妈的????)。扫码购买 

凡是从我这里购买的,我都返现 10元 给大家哈,相当于79元一年,比在其它渠道那里买便宜一些。

我这里还有购买后的教程:搭建教程,从0开始一步一步带你搭建 

------  END  ---------

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。关注公众号并回复 888 领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值