一、题目
请完成一个函数,输入一个二叉树,该函数输出它的镜像,返回镜像后的根节点TreeNode
。
二、示例
2.1> 示例 1:
【输入】root = [4,2,7,1,3,6,9]
【输出】[4,7,2,9,6,3,1]
限制:
0
<= 节点个数 <=1000
三、解题思路
根据题目描述,我们需要将一颗二叉树以镜像的方式进行转换,然后输出这棵全新二叉树的根节点。那么既然要以镜像的方式进行树结构的变化,我们就需要首先找出这种“镜像”转换的规则是怎么样的。
下面我们以【输入】root = [4,2,7,1,3,6,9]
为例,当以镜像方式转换完毕之后,那么全新的这个二叉树应该是【输出】root = [4,7,2,9,6,3,1]
,那么大家请见下图所示,我以图例的方式演示了整个转换的过程,即:
【第1层】根节点Node(4)不用转换。
【第2层】互换根节点Node(4)的左右子节点,即:Node(2) 与 Node(7) 进行互换。
【第3层】那么针对Node(2)的左右子节点(Node(1)和Node(3))和Node(7)的左右子节点(Node(6)和Node(9))进行互换。
从上面的镜像转换过程中,我们可以发现一个规律,就是只针对某个节点Node的左子节点Node.left和右子节点Node.right进行互换操作即可。所以,当遍历完二叉树中所有的树节点并且执行完互换,也就完成了整个二叉树的镜像操作了。
解题思路就如上所示,具体的代码实现,请见本文代码实现部分。
四、代码实现
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if (root == null) return root;
TreeNode leftNode = mirrorTree(root.left);
TreeNode rightNode = mirrorTree(root.right);
root.left = rightNode;
root.right = leftNode;
return root;
}
}
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」