leetcode的第102题(二叉树的层级遍历)

165 阅读1分钟
public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if (root == null) {
            return res;
        }
        //队列是先进先出的
        Queue<TreeNode> q = new LinkedList<>();
        //进入队列
        q.offer(root);

        while(!q.isEmpty()) {
            //创建一个临时动态数组
            List<Integer> temp = new ArrayList<>();
            int len = q.size();
            //主要是为了让同一层次的节点出队列
            for (int i = 0; i < len; i++){
                //弹出队列
                TreeNode node = q.poll();
                temp.add(node.val);
                //统一层的节点加入队列中
                if (node.left != null){
                    q.offer(node.left);
                }
                if (node.right != null){
                    q.offer(node.right);
                }
            }
            res.add(temp);
        }
        return res;
    }
}

leetcode的第102题

主要解题思路

  1. 创建一个队列用来接收层级节点,创建一个二维的动态数组
  2. 接收完节点,通过循环将层级节点弹出队列,并把节点的值存进临时的动态数组
  3. 判断层级节点的左孩子和右孩子是否存在
  4. 如果存在,重复2、3步骤