首发于 语雀文档@blueju
代码:
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*//*** @param {TreeNode} root* @return {number[]}*/var averageOfLevels = function (root) {if (root === null) return []/** 记录每层的和 */const sum = []/** 记录每层节点的数量 */const count = []dfs(root, 0, sum, count)return sum.map((item, index) => {return item / count[index]})};function dfs(root, level, sum, count) {if (root === null) return rootsum[level] = sum[level] === undefined ? root.val : sum[level] + root.valcount[level] = count[level] === undefined ? 1 : count[level] + 1root.left && dfs(root.left, level + 1, sum, count)root.right && dfs(root.right, level + 1, sum, count)}
2021年11月2日再做一次
/*** Definition for a binary tree node.* class TreeNode {* val: number* left: TreeNode | null* right: TreeNode | null* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }* }*/function averageOfLevels(root: TreeNode | null): number[] {if (root === null) return []/* 每层树节点 */let levelTreeNode = []dfs(root, 1, levelTreeNode)levelTreeNode.shift()const result = levelTreeNode.map((item: number[]) => {const sum = item.reduce((prev, curr) => prev + curr, 0)return sum / item.length})return result};const dfs = (root: TreeNode, level: number, levelTreeNode) => {if (Array.isArray(levelTreeNode[level])) {levelTreeNode[level].push(root.val)} else {levelTreeNode[level] = []levelTreeNode[level].push(root.val)}root.left && dfs(root.left, level + 1, levelTreeNode)root.right && dfs(root.right, level + 1, levelTreeNode)}
