1 递归中序遍历
【BST的重要属性之一】:BST中序遍历 = 升序数组
遇到在BST上求最值,差值等,都要思考一下二叉搜索树可是有序的,要利用好这一特点。
/**
* 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 {
private:
int minDiff = INT_MAX;
TreeNode* pre = nullptr;
public:
void traverse(TreeNode* cur) {
if (!cur) return;
traverse(cur->left);
if (pre) { // 中序遍历
int diff = cur->val - pre->val;
if (diff < minDiff) minDiff = diff;
}
pre = cur;
traverse(cur->right);
}
int getMinimumDifference(TreeNode* root) {
if (!root) return 0;
traverse(root);
return minDiff;
}
};
2 迭代法(栈)
待二刷时更新啦~
致谢
感谢「代码随想录」公众号梳理的思路,欢迎大家关注这位大佬的公号