题目描述:

给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。

示例 :

输入:

1
\
3
/
2

输出:
1

解释:
最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
注意: 树中至少有2个节点。

思路:题目给出二叉搜索树,则根据二叉搜索树的性质,左子树<根<右子树,由此性质可知,最小的绝对值一定是两个先后访问的节点的差值,所以只需要比较root和前面一个访问的节点之间的差值即可。

/**
* 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 min_val=INT_MAX;

void inorder(TreeNode* &root,int &min,TreeNode* &pre){
if(root==NULL)
return ;
inorder(root->left,min,pre);
if(pre){
min=(root->val-pre->val)<min?(root->val-pre->val):min;
}
pre=root;
inorder(root->right,min,pre);
}

int getMinimumDifference(TreeNode* root) {
if(root==NULL)
return 0;
TreeNode* pre=NULL;
inorder(root,min_val,pre);
return min_val;
}
};

LeetCode_530_二叉搜索树的最小绝对差_最小值