Count Nodes Equal to Average of Subtree

MediumTreeDepth-First SearchBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function averageOfSubtree(root: TreeNode | null): number {
  let answer = 0;
  function traverse(node: TreeNode | null): [number, number] {
    if (!node) {
      return [0, 0];
    }
    const [leftNodeCnt, leftNodeSum] = traverse(node.left);
    const [rightNodeCnt, rightNodeSum] = traverse(node.right);
    const nodeCnt = leftNodeCnt + rightNodeCnt + 1;
    const nodeSum = leftNodeSum + rightNodeSum + node.val;
    const average = Math.floor(nodeSum / nodeCnt);
    if (average === node.val) {
      answer += 1;
    }
    return [nodeCnt, nodeSum];
  }
  traverse(root);
  return answer;
}