20230925刷题记录
参考代码随想录来刷的。
关键词:层序遍历
目录
下面的题都是用的层序遍历模板,用多了就会了
1 637.二叉树的层平均值
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> res = new ArrayList<>();
if (root == null)
return res;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
TreeNode p;
while (!queue.isEmpty()) {
int size = queue.size();
double sum = 0;
for (int i = 0; i < size; i++) {
p = queue.poll();
sum += p.val;
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
}
res.add(sum / size);
}
return res;
}
}
2 429.N叉树的层序遍历
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null)
return res;
LinkedList<Node> queue = new LinkedList<>();
queue.offer(root);
Node p;
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> levelList = new ArrayList<>();
for (int i = 0; i < size; i++) {
p = queue.poll();
levelList.add(p.val);
for (Node child: p.children)
if (child != null) queue.offer(child);
}
res.add(levelList);
}
return res;
}
}
3 515.在每个树行中找最大值
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null)
return res;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
TreeNode p;
while (!queue.isEmpty()) {
int size = queue.size();
int max = Integer.MIN_VALUE;
for (int i = 0; i < size; i++) {
p = queue.poll();
if (p.val > max) max = p.val;
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
}
res.add(max);
}
return res;
}
}
4 116.填充每个节点的下一个右侧节点指针
class Solution {
public Node connect(Node root) {
if (root == null)
return null;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
Node p;
while (!queue.isEmpty()) {
int size = queue.size();
Node pre = null;
for (int i = 0; i < size; i++) {
p = queue.poll();
if (pre != null) pre.next = p;
pre = p;
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
}
}
return root;
}
}
5 117.填充每个节点的下一个右侧节点指针II
class Solution {
public Node connect(Node root) {
if (root == null)
return null;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
Node p;
while (!queue.isEmpty()) {
int size = queue.size();
Node pre = null;
for (int i = 0; i < size; i++) {
p = queue.poll();
if (pre != null) pre.next = p;
pre = p;
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
}
}
return root;
}
}
6 104.二叉树的最大深度
class Solution {
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int depth = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode p = queue.poll();
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
}
++depth;
}
return depth;
}
}
7 111.二叉树的最小深度
class Solution {
public int minDepth(TreeNode root) {
if (root == null)
return 0;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int depth = 0;
while (!queue.isEmpty()) {
int size = queue.size();
++depth;
for (int i = 0; i < size; i++) {
TreeNode p = queue.poll();
if (p.left == null && p.right == null) return depth;
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
}
}
return depth;
}
}