原题链接: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;
}
};