LeetCode: 503.Minimum Absolute Difference in BST

来源:互联网 发布:视频机器码破解软件 编辑:程序博客网 时间:2024/05/01 04:29

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。

0 0
原创粉丝点击