二叉树的翻转

递归翻转

思路:

  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;  
}
相关推荐
888CC++1 小时前
栈上分配 VS 堆分配 核心区别
java·开发语言·jvm
艾利克斯冰1 小时前
Java面试题汇总
java
我是一颗柠檬2 小时前
【JavaSE全面教学】Java集合框架下Day13(2026年)
java·开发语言·intellij-idea
吃好睡好便好2 小时前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
vx-程序开发2 小时前
基于机器学习的动漫可视化系统的设计与实现-计算机毕业设计源码08339
java·c++·spring boot·python·spring·django·php
灰灰勇闯IT2 小时前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk2 小时前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
LCG元3 小时前
RAG工程指南:从基础检索到生产部署全解析
java·运维·数据库
MhZhou04123 小时前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
石榴树下的七彩鱼3 小时前
医疗票据 OCR 识别 API 多场景落地指南:医保结算 + 商保理赔 + 医疗信息化(附 Python/Java 完整示例)
java·python·ocr·石榴智能·医疗票据ocr·医保结算·ocrapi