class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> list = new ArrayList<>();
Deque<TreeNode> que = new LinkedList<>();
if(root == null){
return list;
}
que.offerLast(root);
while(!que.isEmpty()){
int levelSize = que.size();
double levelSum = 0.0;
for(int i = 0 ; i < levelSize ; i++){
TreeNode poll = que.pollFirst();
levelSum += poll.val;
if (poll.left != null) {
que.addLast(poll.left);
}
if (poll.right != null) {
que.addLast(poll.right);
}
}
list.add(levelSum / levelSize);
}
return list;
}
}
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> list = new ArrayList<>();
Deque<Node> que = new LinkedList<>();
if(root == null){
return list;
}
que.offerLast(root);
while(!que.isEmpty()){
int levelSize = que.size();
List<Integer> levelList = new ArrayList<>();
for(int i = 0 ; i < levelSize ; i++){
Node poll = que.pollFirst();
levelList.add(poll.val);
if (poll.children == null || poll.children.size() == 0 ) {
continue;
}
for(Node child : poll.children){
if (child != null){
que.offerLast(child);
}
}
}
list.add(levelList);
}
return list;
}
}
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer> list = new ArrayList<>();
Deque<TreeNode> que = new LinkedList<>();
if(root == null){
return list;
}
que.offerLast(root);
while(!que.isEmpty()){
int levelSize = que.size();
int max = Integer.MIN_VALUE;
for(int i = 0 ; i < levelSize ; i++){
TreeNode poll = que.pollFirst();
max = Math.max(max,poll.val);
if (poll.left != null) {
que.addLast(poll.left);
}
if (poll.right != null) {
que.addLast(poll.right);
}
}
list.add(max);
}
return list;
}
}
class Solution {
public Node connect(Node root) {
if (root == null) return root;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
Node prev = null;
for (int i = 0; i < size; i++) {
Node curr = queue.poll();
if (prev != null) {
prev.next = curr;
}
prev = curr;
if (curr.left != null) queue.offer(curr.left);
if (curr.right != null) queue.offer(curr.right);
}
prev.next = null; // Set the next pointer of the last node in the level to NULL
}
return root;
}
}