637. Average of Levels in Binary Tree
Учитывая корень бинарного дерева, верните среднее значение узлов на каждом уровне в виде массива. Принимаются ответы в пределах 10-5 от фактического ответа.
Пример:
Input: root = [3,9,20,null,null,15,7]
Output: [3.00000,14.50000,11.00000]
C# решение
сопоставлено/оригиналusing System;
using System.Collections.Generic;
public class Solution {
public IList<double> AverageOfLevels(TreeNode root) {
var result = new List<double>();
var queue = new Queue<TreeNode>();
queue.Enqueue(root);
while (queue.Count > 0) {
long sum = 0;
int count = queue.Count;
for (int i = 0; i < count; i++) {
var node = queue.Dequeue();
sum += node.val;
if (node.left != null) queue.Enqueue(node.left);
if (node.right != null) queue.Enqueue(node.right);
}
result.Add((double)sum / count);
}
return result;
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public IList<double> AverageOfLevels(TreeNode root) {
var result = new List<double>();
var queue = new queue<TreeNode>();
queue.Enqueue(root);
while (queue.size() > 0) {
long sum = 0;
int count = queue.size();
for (int i = 0; i < count; i++) {
var node = queue.Dequeue();
sum += node.val;
if (node.left != null) queue.Enqueue(node.left);
if (node.right != null) queue.Enqueue(node.right);
}
result.push_back((double)sum / count);
}
return result;
}
}
Java решение
сопоставлено/оригиналimport java.util.*;
public class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> result = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
long sum = 0;
int count = queue.size();
for (int i = 0; i < count; i++) {
TreeNode node = queue.poll();
sum += node.val;
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
result.add((double) sum / count);
}
return result;
}
}
JavaScript решение
сопоставлено/оригиналvar averageOfLevels = function(root) {
let result = [];
let queue = [root];
while (queue.length > 0) {
let levelSum = 0;
let levelCount = queue.length;
for (let i = 0; i < levelCount; i++) {
let node = queue.shift();
levelSum += node.val;
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
result.push(levelSum / levelCount);
}
return result;
};
Python решение
сопоставлено/оригиналfrom collections import deque
def averageOfLevels(root):
result = []
queue = deque([root])
while queue:
level_sum, level_count = 0, len(queue)
for _ in range(level_count):
node = queue.popleft()
level_sum += node.val
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level_sum / level_count)
return result
Go решение
сопоставлено/оригиналpackage main
import (
"container/list"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func averageOfLevels(root *TreeNode) []float64 {
var result []float64
queue := list.New()
queue.PushBack(root)
for queue.Len() > 0 {
levelSum := 0
levelCount := queue.Len()
for i := 0; i < levelCount; i++ {
node := queue.Remove(queue.Front()).(*TreeNode)
levelSum += node.Val
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
result = append(result, float64(levelSum)/float64(levelCount))
}
return result
}
Algorithm
Обход дерева
Используйте обход в ширину (BFS) для обхода каждого уровня дерева.
Подсчет среднего значения
Для каждого уровня дерева подсчитайте сумму значений узлов и количество узлов, чтобы вычислить среднее значение.
Сохранение результата
Сохраните среднее значение каждого уровня в массив и верните его.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.
Активных вакансий пока нет.