代码随想录算法打卡第十八天, 新手自我记录一下刷题历程, 仅为自我打卡使用.
class Solution {
private:
int result;
TreeNode* pre;
void traversal(TreeNode* cur) {
if (cur == nullptr) return;
traversal(cur->left);
if (pre != nullptr)
result = min(result, cur->val - pre->val);
pre = cur;
traversal(cur->right);
}
public:
int getMinimumDifference(TreeNode* root) {
result = INT_MAX;
pre = nullptr;
traversal(root);
return result;
}
};
class Solution {
public:
vector<int> findMode(TreeNode* root) {
count = 0;
maxCount = 0;
pre = nullptr;
result.clear();
traversal(root);
return result;
}
private:
void traversal(TreeNode* cur) {
if (!cur) return;
traversal(cur->left);
if (pre == nullptr)
count = 1;
else if (pre->val == cur->val)
count++;
else
count = 1;
pre = cur;
if (count == maxCount)
result.push_back(cur->val);
else if (count > maxCount) {
result.clear();
result.push_back(cur->val);
maxCount = count;
}
traversal(cur->right);
}
TreeNode* pre = nullptr;
int count = 0;
int maxCount = 0;
vector<int> result;
};
class Solution {
public:
TreeNode* traversal(TreeNode* node, TreeNode* p, TreeNode* q) {
if (!node) return nullptr;
if (node == p || node == q) return node;
TreeNode* left = traversal(node->left, p, q);
TreeNode* right = traversal(node->right, p, q);
if (left && right) return node;
else if (left && !right) return left;
else if (!left && right) return right;
else return nullptr;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
return traversal(root, p, q);
}
};
回来了, 希望明天可以再坚持一天!