题目面试
请完成一个函数,输入一棵二叉树,请函数输出它的镜像。ide
以下所示:函数
问题分析测试
根据题目的要求,求出一个二叉树的镜像。首先咱们要知道什么是二叉树的镜像,咱们经过上图能够得出,镜像就是二叉树的每层节点的左右子树进行相互交换。说白了就是除了根节点外,全部的结点中的左子节点的镜像是右子节点,右子节点的镜像变成了左子节点。动画
基本的问题咱们弄明白了,下一步咱们屡屡思路,开始动手实现二叉树的镜像。code
由于每一个具备非空节点的节点的左右子节点都要进行交换,因此咱们能够用递归来解决。具体思路分析,咱们看下方的解决思路。blog
动画实现递归
解决思路ip
首先,咱们使用递归要找到递归的终止条件,不能一直往下递归呀,当咱们遇到叶子节点的时候,咱们就不用进行递归交换了。因此递归条件就是当前递归的节点是否为空。it
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
测试用例