Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.
Example:
Input:
1
\
3
/
2
Output:
1
Explanation:
The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).
方法1: 对每个节点进行寻找。 前序遍历+寻找。
/**
* 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 {
public:
int getMinimumDifference(TreeNode* root) {
TreeNode * cur ;
int left,right;
// left
cur = root -> left;
if(cur){
while(cur->right){
cur = cur->right;
}
left = abs(cur->val - root->val);
}
else
left = -1;
// right
cur = root -> right;
if(cur){
while(cur->left){
cur = cur->left;
}
right = abs(cur->val - root->val);
}
else
right = -1;
int min_diff ;
if(left == -1 || right == -1){
if(left==-1 && right ==-1)
min_diff = INT_MAX;
else
min_diff = (left==-1?right:left);
}
else{
min_diff = min(left,right);
}
if(root->left)
min_diff = min(min_diff,getMinimumDifference(root->left));
if(root->right)
min_diff = min(min_diff,getMinimumDifference(root->right));
return min_diff;
}
};
方法2:中序遍历,记录前一个节点。
/**
* 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:
void traverse(TreeNode *root,int& last,int& diff){
if(root->left)
traverse(root->left,last,diff);
if(last == -1)
last = root -> val;
else{
diff = min(diff,abs(last - root->val));
last = root -> val;
}
if(root->right)
traverse(root->right,last,diff);
}
public:
int getMinimumDifference(TreeNode* root) {
int diff = INT_MAX,last = -1;
traverse(root,last,diff);
return diff;
}
};