原题链接:530.二叉搜索树的最小绝对差
思路:
因为是二叉搜索树,根据他的特性,直接递归中序遍历获取所有元素,成为一个有序数组
然后在有序数值内进行双指针递归遍历即可获得最小差值
因为是有序数组,所以其实求相邻两个值的差值是不是最小值即可
全代码:
class Solution {
public:void rev(TreeNode* Node, vector<int>& vec){//中序获得树的所有值if (Node->left) rev(Node->left, vec);vec.push_back(Node->val);if (Node->right) rev(Node->right, vec);}int getmin(vector<int>vec){//获取最小值if (vec.size() < 2) return 0;int num_min = INT_MAX;for (int i = 1; i < vec.size(); i++) { // 统计有序数组的最小差值num_min = min(num_min, vec[i] - vec[i-1]);}return num_min;}int getMinimumDifference(TreeNode* root) {if(root == NULL) return 0;vector<int> vec;rev(root,vec);//获取到树中所有结点的值int cns = getmin(vec);return cns;}
};