Recover Binary Search Tree

MediumTreeDepth-First SearchBinary Search TreeBinary Tree

Solution

import { TreeNode } from '@algorithm/lib';
 
export function recoverTree(root: TreeNode | null): void {
  const MIN_VALUE = Number.MIN_SAFE_INTEGER;
 
  let firstNode = new TreeNode(MIN_VALUE);
  let secondNode = new TreeNode(MIN_VALUE);
  let prevNode = new TreeNode(MIN_VALUE);
  function inorder(node: TreeNode | null): void {
    if (node === null) {
      return;
    }
    inorder(node.left);
    if (node.val <= prevNode.val) {
      if (firstNode.val === MIN_VALUE) {
        firstNode = prevNode;
      }
      secondNode = node;
    }
    prevNode = node;
    inorder(node.right);
  }
  inorder(root);
 
  if (firstNode !== null && secondNode !== null) {
    [firstNode.val, secondNode.val] = [secondNode.val, firstNode.val];
  }
  return;
}