(Java)用队列求二叉树的层序遍历

题目描述

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[ [3], [9,20], [15,7] ]

示例图如下:

在这里插入图片描述

代码如下:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    
    
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
    
    
        //声明一个ArrayList集合用于存值
        ArrayList<ArrayList<Integer>> arr =newArrayList<>();
        
        //声明队列链表
        Queue<TreeNode> queue=new LinkedList<>();
        //根节点不为空
        if(root==null){
    
    
            return arr;
        }
        //放入根节点(一个数相当于一个节点对象)
        queue.offer(root);
        //队列不为空
        while(!queue.isEmpty()){
    
    
            ArrayList<Integer> list=new ArrayList<>();
            //当前层的节点个数
            int count=queue.size();
            while(count-->0){
    
        //个数为n,执行n次
                //弹出先进来的节点
               TreeNode node= queue.poll();
                list.add(node.val);//把节点值放list
               
                //如果上一个节点指向的下一个左节点不为空
                if(node.left!=null){
    
    
                //把左节点放入队列中
                    queue.offer(node.left);

                }
                if(node.right!=null){
    
    
                    queue.offer(node.right);

                }
           }
            arr.add(list);
        }
        return arr;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_51553816/article/details/120123537