前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动画:面试必刷之二叉树的镜像

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

作者头像
乔戈里
发布2019-12-31 16:37:13
3400
发布2019-12-31 16:37:13
举报
文章被收录于专栏:Java那些事Java那些事

作者 | 小鹿 来源 | 小鹿动画学编程

题目

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

如下所示:

问题分析

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

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

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

动画实现

解决思路

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

代码语言:javascript
复制
  if(root == null){
         return;  
    }

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

代码语言:javascript
复制
// 进行结点交换
    Let tempNode = root.left;
    root.left = root.right;
    root.right = tempNode;

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

代码语言:javascript
复制
// 递归遍历剩余的子节点
    insert(root.left);
    insert(root.right);

    // 返回根节点
    return root;

代码实现

JavaScript

Java

Python

测试用例

  • 普通二叉树 —— 普通测试
  • 只有左子节点、只有右子节点、只有一个结点 —— 特殊测试
  • 空树 —— 输入测试
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档