二叉树的翻转

递归翻转

思路:

  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;  
}
相关推荐
集思广益的灰太狼2 分钟前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
孙克旭_13 分钟前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
方方洛18 分钟前
vllm教程-03-架构设计
算法·架构
2601_9619017018 分钟前
SpringCloud2023集成Nacos2.4.3
java
玄昌盛不会编程20 分钟前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
Rain的Java大神之路23 分钟前
如何保证接口幂等
java·经验分享·后端·面试·架构
吴声子夜歌24 分钟前
Java——数组和集合(一)
java·开发语言
Jesse_EC26 分钟前
一个看不见的字符——CRLF 如何让我的 Docker 初始化脚本"静默失踪"
java·后端
深念Y26 分钟前
Nuxt 项目 Docker 构建:从 pnpm+node 迁移到全 bun
java·前端·docker
学长毕业设计30 分钟前
基于SpringBoot的社区鲜奶订购系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端