二叉树的翻转

递归翻转

思路:

  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;  
}
相关推荐
亦暖筑序1 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530144 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao5 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿5 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰6755 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly5 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
RainCity5 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
To_OC15 小时前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC15 小时前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK17 小时前
线段树维护区间 k 次方和
c++·数学·算法·stl