给定一颗二叉树,请返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。
示例:
二叉树 [3, 9, 20, null, null, 15, 7]
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list = new ArrayList<>();if (root == null) {return list;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()) {List<Integer> level = new ArrayList<>();int size = queue.size();for(int i = 0; i < size; i++) {TreeNode cur = queue.poll();level.add(cur.val);if(cur.left != null) {queue.offer(cur.left);}if(cur.right != null) {queue.offer(cur.right);}}list.add(level);}return list;}}
基于上述代码,可以得到的对二叉树层序遍历的经验总结大体为:
- 设置一个list,用于存放层序遍历的结果。
- 设置一个Queue队列,利用其先进先出的特点存放二叉树的节点。
- 用while循环判断并处理队列中的节点。
- 将节点从队列中弹出并加入列表
- 判断当前弹出节点的左右子节点,如果不为空,则将其放入队列中
- 最后结束循环,返回list列表。
