代码随想录算法训练营day18 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
530.二叉搜索树的最小绝对差
点击查看代码
class Solution {
public:
int result = INT_MAX;
TreeNode *pre = nullptr; //每次处理完当前节点后,将当前节点更新为pre节点
void inOrder(TreeNode* root) {
if(root == nullptr) return;
inOrder(root->left);
if(pre != nullptr) result = min(result, abs(root->val - pre->val));
pre = root;
inOrder(root->right);
}
int getMinimumDifference(TreeNode* root) {
inOrder(root);
return result;
}
};
501.二叉搜索树中的众数
点击查看代码
class Solution {
public:
int maxCount = 0;
int curCount = 0;
TreeNode *pre = nullptr;
vector<int> result;
void inOrder(TreeNode *root) {
if(root == nullptr) return;
inOrder(root->left);
//计算当前元素已出现的频次
if(pre == nullptr) curCount = 1;
else if(pre->val == root->val) ++curCount;
else curCount = 1;
//根据当前元素出现的频次对当前元素做出不同的操作
if(curCount == maxCount) result.push_back(root->val);
if(curCount > maxCount) {
//核心操作,若当前元素的频次达到最高,则结果集里的元素均不可能是众数,直接清空
result.clear();
result.push_back(root->val);
maxCount = curCount;
}
pre = root;
inOrder(root->right);
}
vector<int> findMode(TreeNode* root) {
inOrder(root);
return result;
}
};
- 二叉树的最近公共祖先
有点难,先跳过...
2025/03/02

浙公网安备 33010602011771号