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).
Note: There are at least two nodes in this BST.
题目大意:给出一个至少有2个节点且节点中数字均为非负整数的BST,输出任意两个节点之差的最小绝对值。
解题思路:因为BST的中序遍历会按从小到大的顺序遍历节点,所以可以把中序遍历的结果存到数组里,然后比较数组中相邻两数字差的绝对值,就可以得到差的最小绝对值。
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
#define maxn 100000
int arr[maxn]={0},cnt;
void inorderTraval(struct TreeNode* root)
{
if(!root) return ;
inorderTraval(root->left);
arr[cnt++] = root->val;
inorderTraval(root->right);
}
int getMinimumDifference(struct TreeNode* root) {
int min = 1e10;
inorderTraval(root);
for(int i = 1;i < cnt;i++){
int temp = arr[i] - arr[i-1];
if(min > temp) min = temp;
}
cnt = 0;
return min;
}