跳至主要內容

二叉树每层的均值


二叉树每层的均值

题目

给定一棵二叉树,填充一个数组来表示它所有层次的平均值。 相似问题:找到二叉树的每一层节点中的最大值。

解答

import java.util.*;

class TreeNode {
  int val;
  TreeNode left;
  TreeNode right;

  TreeNode(int x) {
    val = x;
  }
};

class LevelAverage {
  public static List<Double> findLevelAverages(TreeNode root) {
    List<Double> result = new ArrayList<>();
    if (root == null)
      return result;

    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()) {
      int levelSize = queue.size();
      double levelSum = 0;//将currentLevel换成levlSum
      for (int i = 0; i < levelSize; i++) {
        TreeNode currentNode = queue.poll();
        //添加当前节点的值到levelSum中
        levelSum += currentNode.val;
        //添加当前层的子节点
        if (currentNode.left != null)
          queue.offer(currentNode.left);
        if (currentNode.right != null)
          queue.offer(currentNode.right);
      }
      //添加当前层的值的平均值到结果数组中
      result.add(levelSum / levelSize);
    }

    return result;
  }

  public static void main(String[] args) {
    TreeNode root = new TreeNode(12);
    root.left = new TreeNode(7);
    root.right = new TreeNode(1);
    root.left.left = new TreeNode(9);
    root.left.right = new TreeNode(2);
    root.right.left = new TreeNode(10);
    root.right.right = new TreeNode(5);
    List<Double> result = LevelAverage.findLevelAverages(root);
    System.out.print("Level averages are: " + result);
  }
}
上次编辑于:
贡献者: Neil