二叉树层序遍历——java
一、题目
1、链接: 2、内容:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
二、层序遍历顺序
层序遍历就是一层一层从左到右开始遍历,如下图,结果为:1--2--3--5--6--7
三、思路(迭代法)
1、判断二叉树是否为空,不为空,头节点入对列: 2、判段队列是否为空,不为空,队列中的元素全部出队,元素出队时: (1)判断出队元素的左节点是否为空,不为空入队; (2)判断出队元素的右节点是否为空,不为空入队; 3、第一层遍历完,接下来到第二层,重复以上操作 4、第二层遍历完,接下来到第三层,重复以上操作 5、队列为空,结束遍历
四、代码实现
(1)遍历每一层元素时,每层元素即为未加入新元素时队列的长度,队列开始加元素时,队列长度会发生变化,所以需要用变量赋值队列长度,以便后面遍历元素时进行判断。 int len=queue.size(); (2)添加左右节点入队时,一定要判断是否未空,空的不入队
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result=new ArrayList<>(); if (root==null) return result; Queue<TreeNode> queue=new LinkedList<>(); queue.add(root); while (!queue.isEmpty()){ int len=queue.size(); List<Integer> list=new ArrayList<>(); while (len>0) { TreeNode res=queue.poll(); list.add(res.val); if (res.left!=null){ queue.add(res.left); } if (res.right!=null){ queue.add(res.right); } len--; } result.add(list); } return result; }
上一篇:
IDEA上Java项目控制台中文乱码