- 二叉搜索树的最小绝对差
- 思路1:
看到二叉搜索树,首先考虑能不能用上中序遍历;
二叉搜索树按中序遍历,处理的结点值是有序的; 注:结点值非负
求任意两节点差的绝对值的最小值,则这对目标结点在中序遍历中一定是相邻的,因此需同时维护前一个结点pre与当前节点cur;
因此,递归和迭代法均可
class Solution {
private:
int Minabs = INT_MAX;
public:
int getMinimumDifference(TreeNode* root) {
stack<TreeNode*> stk;
TreeNode* cur = root;
TreeNode* pre = NULL;
while(cur || !stk.empty()){
if(cur){
stk.push(cur);
cur = cur->left;
}
else{
cur = stk.top();
stk.pop();
if(pre && abs(pre->val - cur->val) < Minabs) Minabs = abs(pre->val - cur->val);
pre = cur;
cur = cur->right;
}
}
return Minabs;
}
};
class Solution {
private:
int Minabs = INT_MAX;
TreeNode* pre = NULL;
void travel(TreeNode* cur){
if(!cur) return;
travel(cur->left);
if(pre && abs(pre->val - cur->val) < Minabs) Minabs = abs(pre->val - cur->val);
pre = cur;
travel(cur->right);
}
public:
int getMinimumDifference(TreeNode* root) {
travel(root);
return Minabs;
}
};
- 二叉搜索树中常用的技巧:记录前一个指针结合中序遍历,可用于求一些最值,差值什么的;