解答:看到二叉搜索树,就思考二叉搜索树的中序遍历为有序数组是否有用,哎因为这题是求最小差值,所以能用该技巧,首先通过O(n)将二叉搜索树中序遍历结果存储到res数组中,然后因为res数组是上升的所以最小值只可能是i减i-1,所以for循环遍历结果数组得到最小值然后输出。总时间复杂度为O(n),空间复杂度为O(n)。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
vector<int> res;
int minDifference(TreeNode* root) {
// write code here
if(root==NULL){return 0;}
int mint=INT32_MAX;
dfs(root);
for(int i=1;i<res.size();i++){
mint=min(mint,res[i]-res[i-1]);
}
return mint;
}
void dfs(TreeNode* root){
if(root==NULL){return ;}
dfs(root->left);
res.push_back(root->val);
dfs(root->right);
}
};