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