二叉树的翻转

递归翻转

思路:

  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 小时前
力扣 51. N 皇后:基础回溯、布尔数组优化、位运算全解(Java 实现)
java·算法·leetcode·力扣·剪枝·回溯·位运算
熊猫钓鱼>_>2 小时前
从零构建大模型可调用的Skill:基于Function Calling的完整指南
人工智能·算法·语言模型·架构·agent·skill·functioncall
py有趣2 小时前
力扣热门100题之螺旋矩阵
算法·leetcode
程序猿阿越2 小时前
Kafka4源码(三)Share Group共享组
java·后端·源码阅读
3秒一个大2 小时前
深入理解 JS 中的栈与堆:从内存模型到数据结构,再谈内存泄漏
前端·javascript·数据结构
亦暖筑序2 小时前
让AI不再"一本正经胡说八道":Spring AI RAG与VectorStore源码全解
java·源码阅读
xiaoyaohou112 小时前
003、轻量化改进(一):网络剪枝原理与实战
算法·机器学习·剪枝
蒙奇·D·路飞-2 小时前
大模型时代下 Java 后端开发的技术重构与工程实践
java·开发语言·重构
我是章汕呐2 小时前
政策评估的“黄金标准”:DID模型从原理到Stata实操
大数据·人工智能·经验分享·算法·回归