Diameter of Binary Tree

EasyTreeDepth-First SearchBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function diameterOfBinaryTree(root: TreeNode | null): number {
  if (!root) {
    return 0;
  }
 
  function maxHeightAndDiameter(node: TreeNode | null): [number, number] {
    if (!node) {
      return [0, 0];
    }
    const [leftMaxHeight, leftMaxDiameter] = maxHeightAndDiameter(node.left);
    const [rightMaxHeight, rightMaxDiameter] = maxHeightAndDiameter(node.right);
 
    return [
      Math.max(leftMaxHeight, rightMaxHeight) + 1,
      Math.max(leftMaxDiameter, rightMaxDiameter, leftMaxHeight + rightMaxHeight),
    ];
  }
 
  return maxHeightAndDiameter(root)[1];
}