递归回溯题。前序遍历为根节点,左子树节点,右子树节点。
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int> ans;
predfsTree(root,ans);
return ans;
}
void predfsTree(Node* root,vector<int>& ans) {
if(root == nullptr)
return;
ans.push_back(root->val);
int len1 = root->children.size();
for(int i = 0; i < len1; i++)
predfsTree(root->children[i],ans);
}
};
递归回溯题。后序遍历的顺序为左子树节点,右子树节点,根节点。
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> postorder(Node* root) {
vector<int> ans;
postdfsTree(root,ans);
return ans;
}
void postdfsTree(Node* root,vector<int>& ans) {
if(root == nullptr)
return;
int len1 = root->children.size();
for(int i = 0; i < len1; i++)
postdfsTree(root->children[i],ans);
ans.push_back(root->val);
}
};
简单模拟题。初始化所有的数组元素都为0,之后给在范围内的数+1,那么最大元素的个数其实就是增加次数最多的范围内的点,也就是需要找出所有的区间中的最小区间,由于所有的区间初始点从0开始,那么也就只需要找出两个数值,一个m和一个n的最小值,然后相乘就是结果。注意初始化的数值。
class Solution {
public:
int maxCount(int m, int n, vector<vector<int>>& ops) {
int min1 = m,min2 = n;
int len1 = ops.size();
for(int i = 0; i < len1 ;i++) {
min1 = min(min1,ops[i][0]);
min2 = min(min2,ops[i][1]);
}
return min1 * min2;
}
};
递归回溯题。这道题目没有在15min内完成,之后看了题解。模拟面试写的时候只是单纯的在递归函数中添加左右扩号,合法性想在得出了结果后再返回处理吗但是处理过程不对,就是右节点为空的情况,因为判定的时候处理合法性写法是当出现左右括号相邻,所以放弃了想法。分为四种情况,然后分别单独考虑得出答案。
/**
* 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:
string tree2str(TreeNode* t) {
if(t == nullptr)
return "";
if(t->left == nullptr && t->right == nullptr)
return to_string(t->val) + "";
if(t->left != nullptr && t->right == nullptr)
return to_string(t->val) + "(" + tree2str(t->left) + ")";
return to_string(t->val) + "(" + tree2str(t->left) + ")" + "(" + tree2str(t->right) + ")";
}
};