Validate Three Nodes

  • h, h

  • recursive

// This is an input class. Do not edit.
class BST {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

function validateThreeNodes(nodeOne, nodeTwo, nodeThree) {
  const isNodeOneAncestor = isAncester(nodeOne, nodeTwo);
  
  if (isNodeOneAncestor) {
    return isAncester(nodeTwo, nodeThree);
  }
  
  const isNodeThreeAncestor = isAncester(nodeThree, nodeTwo);
  if (isNodeThreeAncestor) {
    return isAncester(nodeTwo, nodeOne);
  }

  return false;
}

function isAncester(node1, node2) {
  if (node1 === null) {
    return false;
  }

  if (node1 === node2) return true;

  const left = isAncester(node1.left, node2);
  const right = isAncester(node1.right, node2);

  return left || right;
}

// Do not edit the lines below.
exports.BST = BST;
exports.validateThreeNodes = validateThreeNodes;
  • h, 1

  • iteration

  • optmized

  • d, 1 (d is distance between nodeOne and nodeTwo)

Last updated