Factorization tree

by Artem

TypeScript

'use strict';

// Factorization of 48

class Node {
  constructor(public value: number, public left: Node, public right: Node) {}
}

// Example of a tree structure
/* 
const tree = new Node(
	12,
	new Node(3, null, null),
	new Node(
		4,
		new Node(2, null, null),
		new Node(2, null, null)
	)
);

console.log(tree);
*/

function getGreatestFactor(value: number): number {
  let factors = [];

  for (let i = 2; i <= value / 2; i++) {
    if (value % i === 0) {
      factors.push(value / i);
    }
  }

  return factors[0] || value;
}


function factor(value: number): [number, number] {
  const right = getGreatestFactor(value);
  const left = value / right;

  return [left, right];
}


function buildFactorTree(value: number): Node {
  const [l, r] = factor(value);

  if (l === 1 && r === value) {
    return new Node(r, null, null);
  }

  const rootNode = new Node(value, buildFactorTree(l), buildFactorTree(r));


  return rootNode;
}

console.log(buildFactorTree(48));