Path In Zigzag Labelled Binary Tree

MediumMathTreeBinary Tree

Solution

export function pathInZigZagTree(label: number): number[] {
  const answer: number[] = [];
 
  let currentNode = label;
  let currentLevel = getLevel(label);
  while (0 < currentNode) {
    answer.push(currentNode);
    const minNode = 1 << (currentLevel - 1);
    const maxNode = (1 << currentLevel) - 1;
    currentNode = Math.floor((minNode + maxNode - currentNode) / 2);
    currentLevel -= 1;
  }
  return answer.reverse();
}
 
function getLevel(label: number): number {
  let level = 1;
  let nodeCount = 1;
  while (nodeCount * 2 <= label) {
    nodeCount *= 2;
    level += 1;
  }
  return level;
}