leetcode 530 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
示例 1:
输入:root = [4,2,6,1,3] 输出:1示例 2:
输入:root = [1,0,48,null,null,12,49]
输出:1
代码
//leetcode 530 二叉搜索树的最小绝对差
//迭代保存就行
class Solution {
public:
int getMinimumDifference(TreeNode* root) {
int result = INT_MAX;
stack<TreeNode*> treeSta;
TreeNode* pre = nullptr;
TreeNode* cur = root;
while (!treeSta.empty() || cur != nullptr)
{
while (cur != nullptr)
{
treeSta.push(cur);
cur = cur->left;
}
cur = treeSta.top();
treeSta.pop();
if(pre != nullptr)
{
result = min(result, cur->val - pre->val);
}
pre = cur;
cur = cur->right;
}
return result;
}
};
leetcode 501. 二叉搜索树中的众数
501. 二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
示例 1:
输入:root = [1,null,2,2] 输出:[2]示例 2:
输入:root = [0] 输出:[0]
代码
//leetcode 501. 二叉搜索树中的众数
// 普通做法就是对于任何二叉树而言
// 定义一个map 然后 遍历结点 然后按照map排序即可
class Solution {
public:
vector<int> findMode(TreeNode* root) {
unordered_map<int, int> countMap; // 结点值--频率
vector<int> result;
queue<TreeNode*> treeQue;
treeQue.push(root);
while (!treeQue.empty())
{
TreeNode* cur = treeQue.front();
treeQue.pop();
countMap[cur->val]++;
if (cur->left != nullptr)
{
treeQue.push(cur->left);
}
if (cur->right != nullptr)
{
treeQue.push(cur->right);
}
}
//遍历countMap
int max_count = INT_MIN;
for (auto iter = countMap.begin(); iter != countMap.end(); iter++)
{
if (max_count < iter->second)
{
result.clear();
result.push_back(iter->first);
max_count = iter->second;
}
else if (max_count == iter->second)
{
result.push_back(iter->first);
}
}
return result;
}
};