每日一题:LCR-144 反转二叉树

力扣题目

解题思路

java代码

力扣题目:

给定一棵二叉树的根节点 root,请左右翻转这棵二叉树,并返回其根节点。

示例 1:

输入:root = [5,7,9,8,3,2,4]
输出:[5,9,7,4,2,3,8]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100 <= Node.val <= 100

解题思路:

算法原理
这道题使用递归的方法来翻转二叉树。

思路
对于二叉树的每个节点,先递归地翻转其左右子树,然后交换左右子节点的位置。

代码分析

  • 在 invertTree 方法中,如果节点为空则直接返回空。
  • 分别递归地处理左右子树,获取翻转后的子树。
  • 交换当前节点的左右子节点,完成当前节点的翻转。

时间复杂度:O(h),其中 n 是二叉树的节点数量。因为需要遍历每个节点一次。

空间复杂度:O(n),其中 h 是二叉树的高度。递归调用的栈空间取决于树的高度。在最坏情况下,树是一条链,空间复杂度为 O(h);在最好情况下,树是完全平衡的,空间复杂度为O(logh)  。

java代码:

package com.example.lib;

public class LCR144 {

    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        LCR144 lcr144 = new LCR144();
        lcr144.invertTree(root);
        // 打印一棵树
        TreeNode.printTree(root);
    }
    // 翻转二叉树
    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;
    }
}

更多详细内容同步到公众号,感谢大家的支持!

每天都会给刷算法的小伙伴推送明日一题,并且没有任何收费项

猜你喜欢

转载自blog.csdn.net/LIUCHANGSHUO/article/details/142969812