代码随想录_二叉树_leetcode530 501

leetcode 530 二叉搜索树的最小绝对差

530. 二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

示例 1:

代码随想录_二叉树_leetcode530 501_第1张图片

输入:root = [4,2,6,1,3]
输出:1

示例 2:

代码随想录_二叉树_leetcode530 501_第2张图片

输入:root = [1,0,48,null,null,12,49]
输出:1

 代码

//leetcode 530 二叉搜索树的最小绝对差
//迭代保存就行
class Solution {
public:
	int getMinimumDifference(TreeNode* root) {
		int result = INT_MAX;
		stack 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:

代码随想录_二叉树_leetcode530 501_第3张图片

输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

 

 代码

//leetcode 501. 二叉搜索树中的众数
// 普通做法就是对于任何二叉树而言
// 定义一个map 然后 遍历结点 然后按照map排序即可
class Solution {
public:
	vector findMode(TreeNode* root) {
		unordered_map countMap; // 结点值--频率
		vector result;

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

你可能感兴趣的:(代码随想录,leetcode,leetcode,算法,数据结构)