530. 二叉搜索树的最小绝对差 - 力扣(Leetcode)
利用二叉搜索树特性,构造递增数组解决
class Solution {
public:
vector<int>result;
void traversal(TreeNode* node)
{
if(node==NULL)return;
traversal(node->left);
result.push_back(node->val);
traversal(node->right);
}
int getMinimumDifference(TreeNode* root) {
traversal(root);
int num=INT_MAX;
for(int i=0;i<result.size()-1;i++)
{
num=min(num,abs(result[i]-result[i+1]));
}
return num;
}
};
class Solution {
public:
void traversal(TreeNode* node,unordered_map<int, int>&map)
{
if(node==NULL)return;
traversal(node->left, map);
map[node->val]++;
traversal(node->right, map);
return;
}
bool static cmp(const pair<int, int>&a,const pair<int,int>&b)
{
return a.second>b.second;
}
vector<int> findMode(TreeNode* root) {
unordered_map<int,int>map;
vector<int>result;
if(root==NULL)return result;
traversal(root,map);
vector<pair<int,int>>temp(map.begin(),map.end());
sort(temp.begin(),temp.end(),cmp);
result.push_back(temp[0].first);
for(int i=1;i<temp.size();i++)
{
if(temp[i].second==temp[0].second)
result.push_back(temp[i].first);
}
return result;
}
};
236. 二叉树的最近公共祖先 - 力扣(Leetcode)
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==NULL)return NULL;
if(root==q||root==p)return root;
TreeNode* left=lowestCommonAncestor(root->left, p, q);
TreeNode* right=lowestCommonAncestor(root->right, p, q);
if(left!=NULL&&right!=NULL)return root;
else if(left==NULL&&right!=NULL)return right;
else if(left!=NULL&&right==NULL)return left;
else return NULL;
}
};