> 文章列表 > 代码随想录_二叉树_leetcode530 501

代码随想录_二叉树_leetcode530 501

代码随想录_二叉树_leetcode530 501

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;}
};