【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());
        }
    }

}
相关推荐
CUMT_DJ3 小时前
matlab计算算法的运行时间
开发语言·算法·matlab
KyollBM6 小时前
每日羊题 (质数筛 + 数学 | 构造 + 位运算)
开发语言·c++·算法
Univin8 小时前
C++(10.5)
开发语言·c++·算法
Asmalin9 小时前
【代码随想录day 35】 力扣 01背包问题 一维
算法·leetcode·职场和发展
剪一朵云爱着9 小时前
力扣2779. 数组的最大美丽值
算法·leetcode·排序算法
qq_428639619 小时前
虚幻基础:组件间的联动方式
c++·算法·虚幻
深瞳智检9 小时前
YOLO算法原理详解系列 第002期-YOLOv2 算法原理详解
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
tao3556679 小时前
【Python刷力扣hot100】283. Move Zeroes
开发语言·python·leetcode
怎么没有名字注册了啊9 小时前
C++后台进程
java·c++·算法
Rubisco..10 小时前
codeforces 2.0
算法