102_二叉树的层序遍历

102_二叉树的层序遍历

 

package 二叉树.BT;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
 * https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
 * @author Huangyujun
 * 使用的数据结构是 队列(先进先出,符合每一层根poll掉,进入其子结点,(子结点的顺序也是先进先出))
 */
public class _102_二叉树的层序遍历 {
    //此题需要将同一层的结点放到一个数组中去(因此需要有个状态变量记录已经到达当前层的最后)
    List<Integer> item = new ArrayList<>();
    List<List<Integer>> result = new ArrayList<List<Integer>>();
     public List<List<Integer>> levelOrder(TreeNode root) {
         if(root == null)    return result;
         Queue<TreeNode> queue = new LinkedList<>();
         queue.offer(root);
         int levelSize = 1;//当前层的结点数量
         while(!queue.isEmpty()) {
             //拿到当前结点
             TreeNode node = queue.poll();
             levelSize--;
             item.add(node.val);
             if(node.left != null) {
                 queue.offer(node.left);
             }
             
             if(node.right != null) {
                 queue.offer(node.right);
             }
             
             if(levelSize == 0) {    //当前层的结束,需要进入下一层
                result.add(item);
                item = new ArrayList<>();
                //进入下一层(观察发现,下一层的结点数量就是队列长度)
                levelSize = queue.size();
             }
         }
         
         return result;
    }
}

 

posted @ 2021-12-19 23:51  一乐乐  阅读(26)  评论(0编辑  收藏  举报