LeetCode102.二叉树的层序遍历

发布时间 2023-11-03 08:02:31作者: 白布鸽

题目描述

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)

示例

image

提交的代码

import java.util.List;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        if(root==null)return result;
        int curCount=1;
        int nextCount=0;
        Deque<TreeNode> queue=new LinkedList<>();
        TreeNode cur=root;
        queue.offer(cur);
        List<Integer> list= new ArrayList<>();
        while(!queue.isEmpty()){
            //队首元素出队
            cur=queue.poll();
            list.add(cur.val);
            if(cur.left!=null){
                queue.offer(cur.left);
                nextCount++;
            }
            if(cur.right!=null){
                queue.offer(cur.right);
                nextCount++;
            }
            if(list.size()==curCount){
                result.add(list);
                curCount=nextCount;
                nextCount=0;
                list = new ArrayList<>();
            }
        }
        return result;
    }
}

学习到的东西

上面的代码是以前记住的一种写法,实现起来略显繁复,需要统计当前层的数量和下一层的数量,写的时候都不大好搞。
换一种写法,代码好写一点。

import java.util.List;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        if(root==null)return result;
        Deque<TreeNode> queue=new LinkedList<>();
        TreeNode cur=root;
        int curCount=0;
        queue.offer(cur);
        while(!queue.isEmpty()){
            List<Integer> list=new ArrayList<>();
            curCount=queue.size();
            while(curCount>0){
                cur=queue.poll();
                list.add(cur.val);
                if(cur.left!=null)queue.offer(cur.left);
                if(cur.right!=null)queue.offer(cur.right);
                curCount--;
            }
            result.add(list);
        }
        return result;
    }
}