【Hot100】LeetCode—226. 翻转二叉树

目录

  • [1- 思路](#1- 思路)
    • [Queue 队列实现层序遍历 + 交换左右](#Queue 队列实现层序遍历 + 交换左右)
  • [2- 实现](#2- 实现)
    • [⭐226. 翻转二叉树------题解思路](#⭐226. 翻转二叉树——题解思路)
  • [3- ACM 实现](#3- ACM 实现)

1- 思路

Queue 队列实现层序遍历 + 交换左右

  • 1- 借助 Queue 实现层序遍历
  • 2- 实现左右交换方式

2- 实现

⭐226. 翻转二叉树------题解思路

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null){
            return root;
        }
        // 借助队列实现层序交换
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int len = queue.size();
            while(len>0){
                TreeNode nowNode = queue.poll();
                swapNode(nowNode);
                if(nowNode.left!=null) queue.add(nowNode.left);
                if(nowNode.right!=null) queue.add(nowNode.right);
                len--;
            }
        }
        return root;
    }

    public void swapNode(TreeNode node){
        TreeNode tmp = node.left;
        node.left = node.right;
        node.right = tmp;
    }
}

3- ACM 实现

java 复制代码
public class invertTree {

    public static 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;
        }
    }



    public static TreeNode build(String str){
        if(str == null || str.length()==0){
            return null;
        }
        String input = str.replace("[","");
        input = input.replace("]","");
        String[] parts = input.split(",");

        Integer[] nums = new Integer[parts.length];
        for(int i = 0 ; i < parts.length;i++){
            if(!parts[i].equals("null")){
                nums[i] = Integer.parseInt(parts[i]);
            }else{
                nums[i] = null;
            }
        }
        Queue<TreeNode> queue = new LinkedList<>();
        TreeNode root = new TreeNode(nums[0]);
        queue.offer(root);
        int index = 1;
        while(!queue.isEmpty()&& index<parts.length){
            TreeNode node = queue.poll();
            if(index<nums.length && nums[index]!=null){
                node.left = new TreeNode(nums[index]);
                queue.offer(node.left);
            }
            index++;
            if(index<nums.length && nums[index]!=null){
                node.right = new TreeNode(nums[index]);
                queue.offer(node.right);
            }
            index++;
        }
        return root;
    }
    public static TreeNode invertTree(TreeNode root) {
        if(root==null){
            return root;
        }
        // 借助队列实现层序交换
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int len = queue.size();
            while(len>0){
                TreeNode nowNode = queue.poll();
                swapNode(nowNode);
                if(nowNode.left!=null) queue.add(nowNode.left);
                if(nowNode.right!=null) queue.add(nowNode.right);
                len--;
            }
        }
        return root;
    }

    public static void swapNode(TreeNode node){
        TreeNode tmp = node.left;
        node.left = node.right;
        node.right = tmp;
    }

    static List<Integer> levelRes = new ArrayList<>();
    public static TreeNode levelT(TreeNode root) {
        if(root==null){
            return root;
        }
        // 借助队列实现层序交换
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int len = queue.size();
            while(len>0){
                TreeNode nowNode = queue.poll();
                levelRes.add(nowNode.val);
                if(nowNode.left!=null) queue.add(nowNode.left);
                if(nowNode.right!=null) queue.add(nowNode.right);
                len--;
            }
        }
        return root;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        TreeNode root = build(input);
        root = invertTree(root);
        levelT(root);
        System.out.println("结果是"+levelRes.toString());
    }
}
相关推荐
hope_wisdom16 分钟前
Python面试宝典第48题:找丑数
python·算法·面试·找丑数·暴力法·动态规划法·优先队列法
.普通人18 分钟前
c语言--力扣简单题目(最后一个单词的长度)讲解
c语言·算法·leetcode
aWty_44 分钟前
机器学习--支持向量机(SVM)
算法·机器学习·支持向量机
抓哇能手1 小时前
王道408考研数据结构-树与二叉树-第五章-第一二节
数据结构·考研·算法·408·王道408
干货没人看1 小时前
惩罚矩阵?动态规划是如何爱上矩阵的
c语言·c++·经验分享·算法
shan_shmily1 小时前
算法知识点——常用输入输出数据的方式
算法
Utgnryk1 小时前
数组与贪心算法——452、435、646、406、169(1简4中)
算法·贪心算法
雪碧有白泡泡1 小时前
Stable Diffusion AI算法,实现一键式后期处理与图像修复魔法
人工智能·算法·stable diffusion
魔力之心1 小时前
实变函数精解【21】
算法·实变函数
Solidao1 小时前
从0开始的算法(数据结构和算法)基础(十一)
数据结构·python·算法