JAVA练习306- 翻转二叉树

题目概览

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

示例 1:

复制代码
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

复制代码
输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

复制代码
输入:root = []
输出:[]

提示:

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

来源:226. 翻转二叉树 - 力扣(LeetCode)

解题分析

方法一:递归

直接交换左右两边节点即可,左右节点的翻转再调用当前方法翻转即可,当节点为 null 时终止。

时间复杂度:O(n)

空间复杂度:O(n)

java 复制代码
/**
 * 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 root;
        }
        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);
        root.left = right;
        root.right = left;
        return root;
    }
}

方法二:迭代

用队列或栈都可以,用来存储根节点,每次出队列时交换左右节点,然后将左右节点入队列,直到队列为空。

时间复杂度:O(n)

空间复杂度:O(n)

java 复制代码
/**
 * 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 root;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            TreeNode temp = node.left;
            node.left = node.right;
            node.right = temp;
            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }
        }
        return root;
    }
}
相关推荐
smj2302_7968265211 小时前
解决leetcode第3989题网格中保持一致的最大列数
python·算法·leetcode
wangbing112512 小时前
JPA下自定义主键
java·linux·服务器
巧克力男孩dd13 小时前
Python超典型练习题(第一次作业)
开发语言·python·算法
plainGeekDev13 小时前
NullPointerException → Kotlin 空安全
android·java·kotlin
爱刷碗的苏泓舒13 小时前
平方根信息滤波:矩阵推导及 GNSS 参数估计应用
线性代数·算法·矩阵·gnss·参数估计·测量平差·平方根信息滤波
想做小南娘,发现自己是女生喵14 小时前
第 2 章 顺序表和 vector
java·数据结构·算法
艾醒15 小时前
2026年第29周(7.13-7.19)AI全复盘:技术突破、行业趣闻翻车、算力服务器商业动态
人工智能·算法
CHANG_THE_WORLD15 小时前
6.多线程的TCP通信
java·网络·tcp/ip
雪碧聊技术15 小时前
动态规划算法—01背包问题
算法·动态规划