二叉树的翻转

递归翻转

思路:

  1. 终止条件:当前节点为空时,返回 null。
  2. 交换左右节点:先把遇到节点的左右子节点用一个 temp 节点交换。
  3. 递归处理子树:再递归调用方法,翻转当前节点的左子树,和右子树。

题解:

java 复制代码
public TreeNode invertTree(TreeNode root) {  
    if (root == null) {  
        return null;  
    }  
    // 交换当前节点的左右子节点  
    TreeNode temp = root.left;  
    root.left = root.right;  
    root.right = temp;  
  
    // 递归翻转左右子树  
    invertTree(root.left);  
    invertTree(root.right);  
  
    return root;  
}

迭代翻转

思路:

  1. 初始化:先将根节点加入队列。
  2. 各层级出队列循环:当队列不为空时,逐个取出现有队列里的所有元素。
  3. 交换和存入下一级:每取出一个节点就交换它的左右子节点。交换完成后,如果现在的左子节点或者右子节点不为空(此时位置已经交换),就将它们继续添加到队列里,用于下一层级的交换。

题解:

java 复制代码
public TreeNode invertTreeIterative(TreeNode root) {  
    if (root == null) return null;  
    Queue<TreeNode> queue = new LinkedList<>();  
    queue.offer(root);  
    while (!queue.isEmpty()) {  
        int size = queue.size();  
        for (int i = 0; i < size; i++) {  
            TreeNode cur = queue.poll();  
            // 交换当前节点的左右子节点  
            TreeNode temp = cur.left;  
            cur.left = cur.right;  
            cur.right = temp;  
            // 将左右子节点入队,以便后续处理  
            if (cur.left != null) queue.offer(cur.left);  
            if (cur.right != null) queue.offer(cur.right);  
        }  
    }  
    return root;  
}
相关推荐
Mem0rin10 分钟前
前缀和:中心下标与数组乘积
数据结构·算法
Lazionr10 分钟前
list容器详解——双向链表的封装与使用
数据结构·c++·链表·list
snow@li10 分钟前
SpringBoot:AOP日志切面全景梳理/原理+流程+实战+避坑
java·开发语言·spring boot
windliang10 分钟前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
ma_king14 分钟前
Spring Boot 接入飞书自定义机器人
java·后端
漂流瓶jz15 分钟前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
2401_8949155315 分钟前
部署 GEO 优化源码常见报错排查:端口、伪静态、缓存问题解决
java·运维·服务器·后端·缓存·开源
Forever Nore16 分钟前
LeetCode 6 Z 字形变换 - 按行模拟
算法·leetcode
七牛开发者27 分钟前
Codex 实践系列 Vol.04:用 Goal 和 Plan 管住一个长任务
java·数据库·人工智能·github·copilot
我命由我1234533 分钟前
Android Drawable - gradient
android·java·java-ee·kotlin·android studio·android-studio·android runtime