刷题专栏(十二):翻转二叉树

49 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

前言

刷题专栏到目前已经是第十二篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天来看的这道题,没错,依然是二叉树的题目。

《翻转二叉树》,是一道简单类型的题目,也很容易理解。

来一起学习一下吧。

image.png

算法题:翻转二叉树

从题目的标题,我们就能看得出来,这是一道二叉树的题目。

而且可以知道,最后的结果就是要将给出的二叉树题目进行翻转后的新二叉树。

这里你可以是原来的二叉树的基础上进行改造,也可以是给一个新二叉树赋值。

接着我们想一下,二叉树应该如何处理呢?

如果你关注了我的刷题专栏,就会知道处理二叉树,肯定就是使用递归最容易了。

所以这里如果使用递归要如何处理呢。

这里给出我的思路。

首先可以先通过递归进行读取二叉树。

在读取二叉树的同时,将每个节点下的左右两个子节点进行调换。

这样就可以在原有二叉树的基础上完成改造。

最后也就返回原二叉树即可。

代码展示

代码执行如下,采用递归,在原二叉树基础上改造的方式。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);
        root.left = right;
        root.right = left;
        return root;
    }
}

代码执行结果

今天的代码执行结果还是比较满意的,一般能达到这个成绩,就证明这个解法是妥当的。

image.png

总结

今天的这道题主要就是要理解题意,没有什么难度,只要你对二叉树有足够的了解,甚至是初步的了解,就可以解题成功。