LeetCode:226翻转二叉树

方法一:递归法

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null){
            return null;
        }
        //左右节点交换
        TreeNode temp = root.right;
        root.right = root.left;
        root.left = temp;
        //递归左右节点
        invertTree(root.left);
        invertTree(root.right);

        return root;
    }
}

方法二:

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
 class Solution{
    public TreeNode invertTree(TreeNode root){
        if(root == null){
            return null;
        }

        Queue<TreeNode> queue = new LinkedList<>();

        queue.offer(root);

        while(!queue.isEmpty()){
            TreeNode current = queue.poll();
            //交换左右节点
            TreeNode temp = current.left;
            current.left = current.right;
            current.right = temp;

            //左右节点不为空则入队
            if(current.left != null){
                queue.offer(current.left);
            }
            if(current.right != null){
                queue.offer(current.right);
            }
        } 
        return root;
    }
 }

迭代法思路:

先将根节点入队

while循环,只要队列不为空就交换当前要出队节点的左右节点,然后判断当前出队节点的下面是否还有左右节点,如果有就继续入队,循环。

爆栈,层序遍历,逐层打印。寻找最短路径使用队列;核心:new Queue -> offer(root) -> while(!isEmpty) -> poll() -> 处理逻辑 -> offer(children)

相关推荐
happymaker06262 小时前
LeetCodeHot100——42.接雨水
算法
阿正的梦工坊3 小时前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
烬羽3 小时前
从零理解树与二叉树:用 JS 带你手撕遍历和递归
javascript·数据结构
YHL3 小时前
🚀从零理解树与二叉树 —— 概念、实现与遍历
前端·javascript·数据结构
JieE2124 小时前
JS 到底有多少种数据类型?从ECMA规范到内存本质,一文彻底搞懂
javascript·数据结构·面试
努力努力再努力wz4 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
八解毒剂4 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
运行时记录5 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz5 小时前
算法总结(二分查找、双指针)
c++·算法
qq_8573058195 小时前
python语法
开发语言·python·算法