【Java】【力扣】102.二叉树层序遍历

思路

一个辅助队列(初始化队列:根节点入队)

一个节点 出队,他的左右孩子入队

循环 直到队列为空

举例

【Java】【力扣】102.二叉树层序遍历_第1张图片

代码

 public List> levelOrder(TreeNode root) {
            if (root==null){
                return new ArrayList>();
            }
            Queue queue = new LinkedList<>();
            //结果数据
            List> resultList=new ArrayList<>();

            //初始化 入队
            queue.offer(root);

            //层循环
            while (!queue.isEmpty()) {
                //创建level层list
                List level=new ArrayList<>();

                int curSize=queue.size();
                //队列当层循环
                for (int i = 0; i < curSize; i++) {
                    //出队,并得到节点
                    TreeNode node =queue.poll();
                    //如果左孩子不为空,入队
                    if (node.left!= null) {
                        queue.offer(node.left);
                    }
                    //如果右孩子不为空,入队
                    if (node.right != null) {
                        queue.offer(node.right);
                    }
                    //level.add(得到的节点)
                    level.add(node.val);
                }
                //result,添加层节点
                resultList.add(level);
            }
            return resultList;
        }

总结

1. ”if else“和 ” if if“对比

图todo

2.循环变量 .length/.size ,要注意”是否会被改变“

【Java】【力扣】102.二叉树层序遍历_第2张图片

【Java】【力扣】102.二叉树层序遍历_第3张图片

3.习惯性 判空(方法开头)

1-对于传进来的参数,如果为空

其他 todo待补充

【Java】【力扣】102.二叉树层序遍历_第4张图片

你可能感兴趣的:(【Java】【力扣】102.二叉树层序遍历)