最近做什么事情都觉得成就感好低=.= 我决定向小姐妹学习,把刷算法题的过程记录下来。
102. 二叉树的层序遍历
问题描述
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
解题思路
使用辅助数据结构队列实现二叉树的广度优先遍历
1.将根节点入队
2.循环执行以下操作,直至队列为空
- 将队头节点A出队,进行访问
- 将A的左子节点入队
- 将A的右子节点入队
Java中队列Queue的常用方法
add: 增加一个元素。如果队列已满,则抛出IIIegaISlabEepeplian异常
remove: 移除并返回队列头部的元素。如果队列为空,则抛出NoSuchElementException异常
offer: 添加一个元素并返回true。 如果队列已满,则返回false
poll: 移除并返问队列头部的元素。 如果队列为空,则返回null
peek: 返回队列头部的元素。 如果队列为空,则返回null
put: 添加一个元素。 如果队列满,则阻塞
take: 移除并返回队列头部的元素。 如果队列为空,则阻塞
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
Queue<TreeNode> q = new LinkedList<TreeNode>();
if (root != null) {
//根节点入队
q.offer(root);
}
while(!q.isEmpty()){
//level数组存储每一层节点的值
int size = q.size();
List<Integer> level = new ArrayList<>();
for(int i = 0 ; i < size; i++){
//队头节点出队
TreeNode A = q.poll();
level.add(A.val);
//左子节点入队
if(A.left != null){
q.offer(A.left);
}
//右子节点入队
if(A.right != null){
q.offer(A.right);
}
}
res.add(level);
}
return res;
}
}
107. 二叉树的层序遍历 II
问题描述
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
解题思路
总体思路与上一题无异,最后将结果数组进行反转即可。
数组反转可以使用java工具类java.util.Collections中的自带方法Collections.reverse()
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
Queue<TreeNode> q = new LinkedList<TreeNode>();
if (root != null) {
//根节点入队
q.offer(root);
}
while(!q.isEmpty()){
//level数组存储每一层节点的值
int size = q.size();
List<Integer> level = new ArrayList<>();
for(int i = 0 ; i < size; i++){
//队头节点出队
TreeNode A = q.poll();
level.add(A.val);
//左子节点入队
if(A.left != null){
q.offer(A.left);
}
//右子节点入队
if(A.right != null){
q.offer(A.right);
}
}
res.add(level);
}
//反转结果数组
Collections.reverse(res);
return res;
}
}