1.二叉搜索树的最小绝对差
1.1 题目
. - 力扣(LeetCode)
1.2 题解
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int getMinimumDifference(TreeNode* root)
{
vector<int> vec;
Reversal(root,vec);
int minValue=vec[1]-vec[0];
for(int i=0;i<vec.size();i++)
{
if(i>0)
{
int result=abs(vec[i]-vec[i-1]);
minValue=minValue>result?result:minValue;
}
}
return minValue;
}
void Reversal(TreeNode* node,vector<int>& vec)
{
//中序遍历求数组
//确定递归终止条件
if(node==nullptr)return;
//确定单层递归逻辑
//左
Reversal(node->left,vec);
//中
vec.push_back(node->val);
//右
Reversal(node->right,vec);
}
};
2.二叉搜索树中的众数
2.1 题目
. - 力扣(LeetCode)
2.2 题解
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool static cmp(const pair<int, int>& a, const pair<int, int>& b)
{
return a.second > b.second;
}
vector<int> findMode(TreeNode* root)
{
vector<int> vec;
vector<int> result;
Traversal(root, vec);
//用map来统计值以及出现的次数
unordered_map<int, int> map;
for (auto i : vec)
{
map[i]++;
}
//map的key是元素值,value是出现的次数
//map转为vector
vector<pair<int, int>> vec1(map.begin(), map.end());
//按照出现的次数从大到小排序
sort(vec1.begin(), vec1.end(), cmp);
//将出现次数最大的值加进结果集
result.push_back(vec1[0].first);
//之后看有没有出现次数和最大的一样的
for (int i = 1; i < vec1.size(); i++) {
// 取最高的放到result数组中
if (vec1[i].second == vec1[0].second) result.push_back(vec1[i].first);
else break;
}
return result;
}
void Traversal(TreeNode* node, vector<int>& vec)
{
if (node == nullptr)return;
Traversal(node->left, vec);
vec.push_back(node->val);
Traversal(node->right, vec);
}
};
3.二叉树的最近公共祖先
3.1 题目
. - 力扣(LeetCode)
3.2 题解
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{
if (root == nullptr)return nullptr;
if (root == p || root == q)return root;
TreeNode* left = lowestCommonAncestor(root->left,p,q);
TreeNode* right = lowestCommonAncestor(root->right,p,q);
if (left != nullptr && right != nullptr)return root;
if (left == nullptr && right != nullptr)return right;
else if (left != nullptr && right == nullptr)return left;
else return nullptr;
}
};