立志重刷代码随想录60天冲冲冲!!——第十八天
530.二叉搜索树的最小绝对差
写递归稍微有一点感觉,双指针解法
class Solution {
public:
TreeNode* pre = NULL;
int MinValue = INT_MAX;
int getMinimumDifference(TreeNode* root) {
if (root == nullptr) return MinValue;
int LeftValue = getMinimumDifference(root->left);
if (pre != NULL && root->val - pre->val < MinValue) {
MinValue = root->val - pre->val;
}
pre = root;
int RightValue = getMinimumDifference(root->right);
return MinValue;
}
};
501.二叉搜索树中的众数
我感觉一般解法更适合我记忆。。。
1、先遍历二叉树,存在map中
2、对map的value进行排序(需要注意,排序函数需要加static)
3、排序完成后输出数组的第一个的key,同时查看后面是否有相同的众数
class Solution {
public:
/* 一般方法,对于普通二叉树寻找众数 */
// 先遍历,存在map中
unordered_map<int,int> umap;
void searchBST(TreeNode* root) {
if (root == nullptr) return;
umap[root->val]++;
searchBST(root->left);
searchBST(root->right);
return;
}
// 对map中的value进行排序(必须加static)
bool static cmp(pair<int,int> a, pair<int,int> b) {
return a.second > b.second;
}
vector<int> findMode(TreeNode* root) {
vector<int> res;
searchBST(root); // 遍历
vector<pair<int,int>> vec(umap.begin(), umap.end()); // 转换为数组
sort(vec.begin(), vec.end(), cmp); // 数组根据value排序
for (int i = 0; i < vec.size(); i++) {
if (vec[i].second == vec[0].second) {
res.push_back(vec[i].first);
}
}
return res;
}
};
236. 二叉树的最近公共祖先
后序,向上操作
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == NULL) return root;
if (root == p || root == q) return root;
TreeNode* LeftNode = lowestCommonAncestor(root->left, p, q);
TreeNode* RightNode = lowestCommonAncestor(root->right, p, q);
if (LeftNode != NULL && RightNode != NULL) return root;
else if (LeftNode == NULL && RightNode != NULL) return RightNode;
else if (LeftNode != NULL && RightNode == NULL) return LeftNode;
else return NULL;
}
};
顺丰集团工作强度 379人发布