102.二叉树的层序遍历力扣题目链接
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resList = new ArrayList<List<Integer>>();
Deque<TreeNode> que = new LinkedList<>();
if(root != null) que.add(root);
while(!que.isEmpty()){
int size = que.size(); //注意:这个要在外获取
List<Integer> itemList = new ArrayList<>();
for (int i = size; i > 0; i--){
TreeNode node = que.remove();
itemList.add(node.val);
if(node.left != null)que.add(node.left);
if(node.right != null)que.add(node.right);
}
resList.add(itemList);
}
return resList;
}
}
在for循环里的话可能影响到que.size()的值
107.二叉树的层次遍历 II力扣题目链接
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
LinkedList<List<Integer>> res = new LinkedList<>();
if(root == null)return res;
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
while(!que.isEmpty()){
int size = que.size(); //注意
List<Integer> list = new LinkedList<>();
for(int i = 0 ; i < size; i++){
TreeNode temp = que.remove();
list.add(temp.val);
if(temp.left != null) que.add(temp.left);
if(temp.right != null) que.add(temp.right);
}
res.addFirst(list); //添加到队头
}
return res;
}
}
199. 二叉树的右视图力扣题目链接
层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new LinkedList<>();
if(root == null)return res;
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
while(!que.isEmpty()){
int size = que.size();
for(int i = 0 ; i < size ; i++){
TreeNode temp = que.poll();
if(temp.left != null)que.add(temp.left);
if(temp.right != null)que.add(temp.right);
if(i == size - 1){
res.add(temp.val);
}
}
}
return res;
}
}
637.二叉树的层平均值力扣题目链接
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> res = new LinkedList<>();
Queue<TreeNode> que = new LinkedList<>();
if(root == null)return res;
que.add(root);
while(!que.isEmpty()){
int size = que.size();
double sum = 0;
for(int i = 0 ; i < size; i++){
TreeNode temp = que.remove();
sum += temp.val;
if(temp.left != null)que.add(temp.left);
if(temp.right != null)que.add(temp.right);
}
res.add(sum / size);
}
return res;
}
}
429.N叉树的层序遍历力扣题目链接
一个节点有多个孩子而已
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new LinkedList<>();
if(root == null)return res;
Queue<Node> que = new LinkedList<>();
que.add(root);
while(!que.isEmpty()){
List<Integer> list = new LinkedList<>();
int size = que.size();
for(int i = 0; i < size; i++){
Node temp = que.remove();
list.add(temp.val);
for(Node child : temp.children){
que.add(child);
}
}
res.add(list);
}
return res;
}
}