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 표시됨.

전체 채용
아직 활성 채용이 없습니다.