637. Average of Levels in Binary Tree
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.
given корень бинарного дерева, return среднее значение узлов на каждом уровне в виде 배열а. Принимаются ответы в пределах 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++ 해법
자동 초안, 제출 전 검토#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) для обхода каждого уровня дерева.
Подсчет среднего значения
Для каждого уровня дерева подсчитайте сумму значений узлов и количество узлов, чтобы вычислить среднее значение.
Сохранение результата
Сохраните среднее значение каждого уровня в 배열 и return его.
😎
Vacancies for this task
활성 채용 with overlapping task tags are 표시됨.
아직 활성 채용이 없습니다.