Java二叉树的镜像带测试用例_动画:面试必刷之二叉树的镜像

364d4163ebb6809f73fc98d831ed04c9.png

题目

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

如下所示:

c1333037d25da3b5d5dd6961f29f9492.png

问题分析

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

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

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

动画实现

283fab67c6425fd5bc04d31712ba3f27.png

解决思路

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

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

49d60d0c89f9d9fcc53fc3c2dbf54461.png

Java

383d885db519f5100a54f9b7f235f071.png

Python

e718ace255dc32fcb5c848ef0c1c781b.png

测试用例

普通二叉树 —— 普通测试

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

空树 —— 输入测试

编写程序实现二叉树的如下操作: 1) 建立二叉链表 2) 二叉树的先序、中序、后序遍历 3) 求二叉树的叶子结点个数 4) 将二叉树中所有结点的左、右子树相互交换 输入:   按完全二叉树的层次关系给出二叉树的遍历序列(#表示虚结点,数据结点为单一字符)。 输出:   二叉树的凹入表示   二叉树的先序序列、中序序列、后序序列   二叉树叶子结点个数   左、右子树相互交换后的二叉树的凹入表示   左、右子树相互交换后的二叉树的先序序列、中序序列、后序序列。 说明:   在输出凹入表示的二叉树时,先输出根结点,然后依次输出左右子树,上下层结点之间相隔 3 个空格。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1 以文本方式显示 abc#de↵ 以文本方式显示 BiTree↵ a↵ b↵ d↵ c↵ e↵ pre_sequence : abdce↵ in_sequence : bdaec↵ post_sequence : dbeca↵ Number of leaf: 2↵ BiTree swapped↵ a↵ c↵ e↵ b↵ d↵ pre_sequence : acebd↵ in_sequence : ceadb↵ post_sequence : ecdba↵ 1秒 64M 0 测试用例 2 以文本方式显示 abcdefg↵ 以文本方式显示 BiTree↵ a↵ b↵ d↵ e↵ c↵ f↵ g↵ pre_sequence : abdecfg↵ in_sequence : dbeafcg↵ post_sequence : debfgca↵ Number of leaf: 4↵ BiTree swapped↵ a↵ c↵ g↵ f↵ b↵ e↵ d↵ pre_sequence : acgfbed↵ in_sequence : gcfaebd↵ post_sequence : gfcedba↵ 1秒 64M 0
最新发布
10-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值