LeetCode: 503.Minimum Absolute Difference in BST

LeetCode: 503.Minimum Absolute Difference in BST

contest21的題目。

題目其實剛好和前天做的LeetCode 98. Validate Binary Search Tree是類似的。
簡單來說就是問你,規定difference是排序後的前後結點差的絕對值,問最小的絕對值差。
其實就是中序遍歷,然後保存當前最小值和前一個結點的值用於下一次比較。很快地寫出遞歸解法:

遞歸

時間複雜度是O(n),空間複雜度也是O(n)。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    TreeNode *pre = NULL;
    int minabsdiff = -1;
public:
    int getMinimumDifference(TreeNode* root) {
        if(!root)
            return 0;

        getMinimumDifference(root->left);
        if( pre )
            if(minabsdiff < 0 || minabsdiff > abs(root->val - pre->val))
                minabsdiff = abs(root->val - pre->val);
        pre = root;
        getMinimumDifference(root->right);

        return minabsdiff;
    }
};

第一次玩這LeetCodecontest,粗心提交了兩次小錯誤版本,所以罰了1200s……大概要注意的是,因爲minabsdiff有可能到INT_MAX,我乾脆一開始給負數,好直接保存第一個有效的absdiff。

發佈了27 篇原創文章 · 獲贊 0 · 訪問量 7948
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章