https://leetcode.com/problems/minimum-absolute-difference-in-bst/description/?envType=study-plan-v2&envId=top-interview-150

Approach 3: In-order Traversal Without List

Algorithm

  1. Create an answer variable minDifference and initialize it to infinity.
  2. Create a TreeNode variable prevNode to keep track of the previous node we have traversed. Initialize it to null.
  3. Perform the inorder traversal of the binary search tree (BST). Call inorderTraversal(root) where inorderTraversal is a recursive method that takes TreeNode node as a parameter. We perform the following in this method:
  4. Return minDifference.
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int minDifference = INT_MAX;
    TreeNode* prevNode;

    void inorderTraversal(TreeNode* node){
        if (node == NULL) { return; }

        inorderTraversal(node->left);
        // Find the difference with the previous value if it is there
        if(prevNode != NULL){
            minDifference = min(minDifference, node->val - prevNode->val);
        }
        prevNode = node;
        inorderTraversal(node->right);
    }

    int getMinimumDifference(TreeNode* root) {
        inorderTraversal(root);
        return minDifference;
    }
};

Complexity Analysis

Here, $n$ is the number of nodes in the given binary search tree.