Leetcode刷题之HOT100之翻转二叉树

2024/5/22 今天雨天,没停过。耳机循环着《偏爱》,开始做题!

1、题目描述

在这里插入图片描述

2、逻辑分析

看到题目,我有点想到了之前做过的题目:对称二叉树。但是还是没啥头绪,看看题解先。

题解给出了递归的方法来实现。大致思路:递归遍历左右子树,先翻转叶子节点,从下至上的反转,最后到根节点就交换两棵子树的位置即可。

在这里插入图片描述

代码演示

public TreeNode invertTree(TreeNode root) {
        // 如果根节点为空(即树为空),则返回null  
        if(root == null){
            return null;
        }
        // 递归地反转左子树,并将反转后的左子树的根节点赋值给left变量
        TreeNode left = invertTree(root.left);
        // 递归地反转右子树,并将反转后的右子树的根节点赋值给right变量
        TreeNode right = invertTree(root.right);
        // 交换当前节点的左右子树,实现反转
        root.left = right;
        root.right = left;
        return root;
    }

过程解释:

  • 递归的基本思想是将问题分解为更小的、相似的子问题,然后解决这些子问题。在这个问题中,反转一个二叉树可以被分解为反转其左子树和右子树,然后交换当前节点的左右子树。

  • 首先,我们检查根节点是否为空。如果为空,则不需要进行任何操作,直接返回null。

  • 然后,我们递归地反转左子树和右子树。递归调用invertTree方法会返回反转后的子树的根节点。

  • 接下来,我们交换当前节点的左右子树。注意,这里的交换是基于我们已经得到了反转后的左子树和右子树的根节点。

  • 最后,我们返回反转后的当前节点。这个节点在反转之前是原树的根节点,在反转之后仍然是新树的根节点(只是其左右子树被交换了)。

时间复杂度:O(n),空间复杂度:O(n)。

ok,bye

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值