题目

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

如下所示:

问题分析

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

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

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

动画实现

解决思路

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

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);45    // 返回根节点6    return root;

代码实现

JavaScript


Java


Python

测试用例

  • 普通二叉树 —— 普通测试
  • 只有左子节点、只有右子节点、只有一个结点 —— 特殊测试
  • 空树 —— 输入测试
©著作权归作者所有:来自51CTO博客作者mb5fe1601ede528的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 动画:面试算法之求二叉树的下一节点
  2. PHP使用递归按层级查找数据(代码详解)
  3. PHP递归算法的应用(含示例)
  4. 什么是php递归
  5. php+nodeJs+thrift协议,实现zookeeper节点数据自动发现
  6. php递归经典案例

随机推荐

  1. 在项目之间共享ASP.NET MVC部分视图
  2. 获取拆分字符串数组的最后一个元素
  3. 我可以更改javascript“this”的上下文吗
  4. FusionCharts的Line.swf做法,我想出现2条
  5. jQuery:执行一个函数AFTER toggleClass被
  6. jquery 更改angularJS input 内容导致绑
  7. 等待执行所有ajax回调的最佳解决方案
  8. AngularJs location.path没有传递参数
  9. « VS 2010 和 .NET 4.0 系列之《VS 2010
  10. 在多个文件中需要相同的模块