【CT】LeetCode手撕—102. 二叉树的层序遍历

目录

  • 题目
  • 1-思路
  • [2- 实现](#2- 实现)
    • [⭐102. 二叉树的层序遍历------题解思路](#⭐102. 二叉树的层序遍历——题解思路)
  • [3- ACM实现](#3- ACM实现)
    • [3-1 二叉树构造](#3-1 二叉树构造)
    • [3-2 整体实现](#3-2 整体实现)

题目


1-思路

  • 1.借助队列 Queue ,每次利用 ①while 循环遍历当前层结点②将当前层结点的下层结点放入 Queue中
  • 2.每遍历一个结点,将值收集到 iterm 中,每一层遍历完,将结果存到 res

2- 实现

⭐102. 二叉树的层序遍历------题解思路

java 复制代码
class Solution {
    // 结果
    List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        if(root==null){
            return res;
        }
        queue.offer(root);

        while(!queue.isEmpty()){
            int len = queue.size();
            List<Integer> iterm = new ArrayList<>();
            while(len>0){
                TreeNode node = queue.poll();
                iterm.add(node.val);
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
                len--;
            }
            res.add(new ArrayList(iterm));
        }
        return res;
    }
}

3- ACM实现

3-1 二叉树构造

java 复制代码
public static TreeNode build(Integer[] nums){
    // 借助 queue 来实现二叉树构造
    Queue<TreeNode> queue = new LinkedList<>();
    TreeNode root = new TreeNode(nums[0]);
    queue.offer(root);
    int index = 1;
    while (!queue.isEmpty() && index < nums.length){
        TreeNode node = queue.poll();
        if(nums[index]!=null && index<nums.length){
            node.left = new TreeNode(nums[index]);
            queue.offer(node.left);
        }
        index++;
        if (nums[index]!=null && index<nums.length){
            node.right = new TreeNode(nums[index]);
            queue.offer(node.right);
        }
        index++;
    }
    return root;
}

3-2 整体实现

java 复制代码
public class levelTraversal {

    static class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(){}
        TreeNode(int x){
            val = x;
        }
    }

    public static TreeNode build(Integer[] nums){
        // 借助 queue 来实现二叉树构造
        Queue<TreeNode> queue = new LinkedList<>();
        TreeNode root = new TreeNode(nums[0]);
        queue.offer(root);
        int index = 1;
        while (!queue.isEmpty() && index < nums.length){
            TreeNode node = queue.poll();
            if(nums[index]!=null && index<nums.length){
                node.left = new TreeNode(nums[index]);
                queue.offer(node.left);
            }
            index++;
            if (nums[index]!=null && index<nums.length){
                node.right = new TreeNode(nums[index]);
                queue.offer(node.right);
            }
            index++;
        }
        return root;
    }


    static List<List<Integer>> res = new ArrayList<>();
    public static List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        if(root==null){
            return res;
        }
        queue.offer(root);

        while(!queue.isEmpty()){
            int len = queue.size();
            List<Integer> iterm = new ArrayList<>();
            while(len>0){
                TreeNode node = queue.poll();
                iterm.add(node.val);
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
                len--;
            }
            res.add(new ArrayList(iterm));
        }
        return res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入二叉树构造数组");
        String input = sc.nextLine();
        input = input.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;
            }
        }
        TreeNode root = build(nums);

        List<List<Integer>> forRes = levelOrder(root);
        for(List<Integer> i:forRes){
            System.out.println(i.toString());
        }
    }

}
相关推荐
圣保罗的大教堂4 分钟前
leetcode 1406. 石子游戏 III 困难
leetcode
晊晌_h1 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦2 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考2 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客3 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵
小白羊丨6 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F7 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper7 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-7 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
智碳能碳管理平台8 小时前
工业能耗台账标准化:能碳管理系统的数据口径怎么设计
算法·能碳管理系统·智碳能碳管理平台·企业能碳管理系统·碳排放核算软件·绿色工厂申报saas·能碳管理平台