描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是 [ [3], [9,20], [15,7]
]
提示: 0 <= 二叉树的结点数 <= 1500
示例1
输入:
{1,2}
返回值:
[[1],[2]]
示例2
输入:
{1,2,3,4,#,#,5}
返回值:
[[1],[2,3],[4,5]]
思路:可以将元素每一层按从左到右的顺序去存储到队列中,然后每一层存储到一个 ArrayList 中即可
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) {
// write code here
ArrayList result = new ArrayList<ArrayList<Integer>>();
if(root == null){
return result;
}
Queue<TreeNode> que = new LinkedList<TreeNode>();
que.offer(root);
while(!que.isEmpty()){
// 每层的节点
int len = que.size();
ArrayList tmp = new ArrayList<>();
while(len > 0){
TreeNode node = que.poll();
tmp.add(node.val);
if(node.left != null)
que.offer(node.left);
if(node.right != null)
que.offer(node.right);
len--;
}
result.add(tmp);
}
return result;
}
}
tips:
add(不带索引默认添加到链表的最后)与offer一样都是添加操作,唯一的区别就是offer没有带索引参数的方法,并且如果队列满了add会抛出异常,而offer不会。
上面这两种操作方式是将LinkedList当作链表或队列来使用。而push操作是将LinkedList当作栈来使用。