Tuesday, August 15, 2017

530. Minimum Absolute Difference in BST

https://leetcode.com/problems/minimum-absolute-difference-in-bst/description/
Solution 1. Construct a vector by an in-order traversal and then run through the vector.
    void inOrder(TreeNode*node, vector<int>&a) {
        if(!node) return;
        if(node->left) inOrder(node->left, a);
        a.push_back(node->val);
        if(node->right) inOrder(node->right, a);
    }
    int getMinimumDifference(TreeNode* root) {
        vector<int> a;
        int dmin = INT_MAX;
        inOrder(root, a);
        for(int i=1; i<a.size(); i++) {
            dmin = min(dmin, a[i]-a[i-1]);
        }
        return dmin;
    }
Solution 2. Comparing when doing traversal (slower). Set initial prev = -1 and check for -1 before calculate dmin to avoid overflow.
    void inOrder(TreeNode*node, int&prev, int&dmin) {
        if(!node) return;
        if(node->left) inOrder(node->left, prev, dmin);
        if(prev!=-1) dmin = min(dmin, node->val - prev);
        prev = node->val;
        if(node->right) inOrder(node->right, prev, dmin);
    }
    int getMinimumDifference(TreeNode* root) {
        int dmin=INT_MAX, prev=-1;
        inOrder(root, prev, dmin);
        return dmin;
    }

No comments:

Post a Comment