2020-11-15 Daily-Challenge
Today is Sunday, I gonna review the tasks I've done this week, and finish today's leetcode's November LeetCoding Challenge with cpp.
LeetCode Review
Populating Next Right Pointers in Each Node
use next pointer we built to achieve the goal
class Solution {
public:
Node* connect(Node* root) {
Node* curLevel = root;
while(curLevel) {
Node* nextLevel = curLevel->left;
Node* curNode = curLevel;
while(curNode) {
if(curNode->left) curNode->left->next = curNode->right;
if(curNode->right) {
if(curNode->next) curNode->right->next = curNode->next->left;
else curNode->right->next = nullptr;
}
curNode = curNode->next;
}
curLevel = nextLevel;
}
return root;
}
};
Permutations II
handwritting next_permutation
but without optimization
class Solution {
bool next_permutation(vector<int>& nums) {
if(nums.size() < 2) return false;
int len = nums.size();
int a = len - 2;
while(a >= 0 && nums[a] >= nums[a+1]) a -= 1;
if(a == -1) return false;
int minGreater = INT_MAX, b = -1;
int i = a+1;
while(i < len) {
if(nums[i] > nums[a] && nums[i] < minGreater) {
b = i;
minGreater = nums[i];
}
i += 1;
}
swap(nums[a], nums[b]);
sort(nums.begin()+a+1, nums.end());
return true;
}
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> ans{nums};
while(next_permutation(nums)) {
ans.push_back(nums);
}
return ans;
}
};
rest one hard problem is great question which need no review(actually my laptop is running out of battery ;P)
November LeetCoding Challenge 15
Description
Range Sum of BST
Given the root node of a binary search tree, return the sum of values of all nodes with a value in the range [low, high].
Example 1:

Input: root = [10,5,15,3,7,null,18], low = 7, high = 15
Output: 32
Example 2:

Input: root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
Output: 23
Constraints:
- The number of nodes in the tree is in the range
[1, 2 * 104]. 1 <= Node.val <= 1051 <= low <= high <= 105- All
Node.valare unique.
Solution
nothing to say
/**
* 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 {
int result = 0;
int high;
int low;
void helper(TreeNode* root) {
if(!root) return;
if(root->val >= low && root->val <= high) result += root->val;
if(root->val > low) helper(root->left);
if(root->val < high) helper(root->right);
}
public:
int rangeSumBST(TreeNode* root, int low, int high) {
this->low = low;
this->high = high;
helper(root);
return result;
}
};