530.二叉搜索树的最小绝对差
/** * 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) { int res=INT_MAX; TreeNode*pre=nullptr; TreeNode*cur=root; stack<TreeNode*>st; while(cur!=nullptr||!st.empty()) { if(cur!=nullptr) { st.push(cur); cur=cur->left; } else { cur=st.top(); st.pop(); if(pre!=nullptr) { res=min(res,cur->val-pre->val); } pre=cur; cur=cur->right; } } return res; } };
501.二叉搜索树中的众数
/**
* 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 {
private:
void searchBST(TreeNode*cur,unordered_map<int,int>&map)
{
if(cur==nullptr)
return;
map[cur->val]++;
searchBST(cur->left,map);
searchBST(cur->right,map);
}
bool static cmp(const pair<int,int>&a,const pair<int,int>&b)
{
return a.second>b.second;
}
public:
vector<int> findMode(TreeNode* root)
{
unordered_map<int,int>map;
vector<int>res;
if(root==nullptr)
return res;
searchBST(root,map);
vector<pair<int,int>>vec(map.begin(),map.end());
sort(vec.begin(),vec.end(),cmp);
res.push_back(vec[0].first);
for(int i=1;i<vec.size();i++)
{
if(vec[0].second==vec[i].second)
res.push_back(vec[i].first);
else
break;
}
return res;
}
};
236. 二叉树的最近公共祖先
/**
* 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(p==root||q==root)
return root;
TreeNode*left=lowestCommonAncestor(root->left,p,q);
TreeNode*right=lowestCommonAncestor(root->right,p,q);
if(left&&right)
return root;
if(!left&&!right)
return nullptr;
if(!left||!right)
return
// if(root==nullptr)
// return nullptr;
// if(p==root||q==root)
// return root;
// TreeNode*left=lowestCommonAncestor(root->left);
// TreeNode*right=lowestCommonAncestor(root->right);
// if(!left&&!right)
// {
// return nullptr;
// }
// if(left&&!right)
// {
// return left;
// }
// if(right==nullptr)
// return left;
// if(left&&right)
// {
// return root;
// }
}
};