Leaf-Similar Trees

EasyTreeDepth-First SearchBinary Tree

Solution

import { range } from '@algorithm/lib';
import { TreeNode } from '@algorithm/lib';
 
export function leafSimilar(root1: TreeNode | null, root2: TreeNode | null): boolean {
  const leafNodes1 = getLeafNodes(root1);
  const leafNodes2 = getLeafNodes(root2);
 
  if (leafNodes1.length !== leafNodes2.length) {
    return false;
  }
 
  for (const i of range(leafNodes1.length)) {
    if (leafNodes1[i] !== leafNodes2[i]) {
      return false;
    }
  }
 
  return true;
}
 
function getLeafNodes(node: TreeNode | null): number[] {
  if (node === null) {
    return [];
  }
 
  if (node.left === null && node.right === null) {
    return [node.val];
  }
 
  return [...getLeafNodes(node.left), ...getLeafNodes(node.right)];
}