Cousins in Binary Tree II

MediumHash TableTreeDepth-First SearchBreadth-First SearchBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function replaceValueInTree(root: TreeNode | null): TreeNode | null {
  if (root === null) {
    return null;
  }
  const queue = [root];
  let prevLevelSum = root.val;
 
  while (0 < queue.length) {
    const levelSize = queue.length;
    let currLevelSum = 0;
 
    for (let i = 0; i < levelSize; i++) {
      const node = queue.shift()!;
      node.val = prevLevelSum - node.val;
      const siblingSum = (node.left?.val ?? 0) + (node.right?.val ?? 0);
      if (node.left) {
        currLevelSum += node.left.val;
        node.left.val = siblingSum;
        queue.push(node.left);
      }
      if (node.right) {
        currLevelSum += node.right.val;
        node.right.val = siblingSum;
        queue.push(node.right);
      }
    }
    prevLevelSum = currLevelSum;
  }
 
  return root;
}

Complexity

  • Time: O(N)
  • Space: O(N)