题目链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
题目描述:
方法一:
1.中序遍历二叉树,得到一个有序数组
2.遍历数组,比较两个相邻元素的差值,返回最小值
/**
* 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:
vector<int> vec;
void travle(TreeNode *root)
{
if(root == NULL) return;
getMinimumDifference(root->left);
vec.push_back(root->val);
getMinimumDifference(root->right);
}
int getMinimumDifference(TreeNode* root) {
travle(root);
int result = INT_MAX;
for(int i = 1; i < vec.size(); i++)
{
result = min(result, vec[i] - vec[i - 1]);
}
return result;
}
};
方法二:在递归过程中记录前一个节点,不需要再增加额外的空间
/**
* 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 result = INT_MAX;
TreeNode *pre; //记录cur前一个节点
void travle(TreeNode *cur)
{
if(cur == NULL) return;
getMinimumDifference(cur->left);
if(pre != NULL)
result = min(result, cur->val - pre->val); //记录最小绝对差
pre = cur; //更新节点
getMinimumDifference(cur->right);
}
int getMinimumDifference(TreeNode* root) {
travle(root);
return result;
}
};