530.二叉搜索树的最小绝对差
要点:把二叉搜索树变成有序数组,因为数组有序,求最小绝对差,只需要求有序数组相邻元素差的最小值就可以了。只要能想出这个思路,这道题就能秒。二叉搜索树的中序遍历结果就是一个有序数组。
class Solution {
public:
TreeNode* pre = nullptr;
int minDiff = INT_MAX;
void traversal(TreeNode* node) {
if (node == nullptr)
return;
traversal(node->left);
if (pre != nullptr) {
minDiff = min(minDiff, abs(pre->val - node->val));
}
pre = node;
traversal(node->right);
}
int getMinimumDifference(TreeNode* root) {
traversal(root);
return minDiff;
}
};
501.二叉搜索树中的众数
要点:看到二叉搜索树,首先应该想到中序遍历
class Solution {
public:
int maxCount = 0;
int count = 0;
TreeNode* pre = nullptr;
vector<int> result;
void traversal(TreeNode* node) {
if (node == nullptr) return;
traversal(node->left);
if (pre == nullptr) {
count = 1;
} else if (pre->val == node->val) {
count++;
} else {
count = 1;
}
pre = node;
if (count == maxCount) {
result.push_back(node->val);
}
if (count > maxCount) {
maxCount = count;
result.clear();
result.push_back(node->val);
}
traversal(node->right);
}
vector<int> findMode(TreeNode* root) {
traversal(root);
return result;
}
};
236. 二叉树的最近公共祖先
要点: