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);}}//遍历countMapint 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;}
};