刚开始看到这道题,习惯性的找了搜索树的最左下和最右下的结点进行计算。结果发现要求返回的是“任意两个结点”的差的绝对值中最小的值。
思路:看了答案,因为二叉搜索树的中序遍历是有序数组,因此可以采用中序遍历对相邻结点之间进行两两计算,返回其中的最小值。
void Find_min(struct TreeNode *root,int *pre,int *min){
if(root==NULL)
return;
Find_min(root->left,pre,min);
if(*pre==-1)
//如果还是初始值,说明当前在树的最左下的结点(即中序遍历的第一个结点)
*pre=root->val;
else{
*min=fmin(*min,root->val-*pre);
*pre=root->val;
}
Find_min(root->right,pre,min);
}
int getMinimumDifference(struct TreeNode* root){
int pre=-1;
//用于保存前一个结点的值,题目规定各结点的val值都大于0,所以初始值可以采用-1
int min=INT_MAX;
//用于保存最小值,这里初始化为int的最大值
Find_min(root,&pre,&min);
return min;
}
![执行情况](https://i-blog.csdnimg.cn/blog_migrate/614c7b47179ca6a803f80409d2d76acf.jpeg)