8.26 刷题第二天
94. 二叉树的中序遍历
/**
* 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:
void inorder(TreeNode* root,vector<int> &res){
if(root==nullptr){
return;
}
inorder(root->left,res);
res.push_back(root->val);
inorder(root->right,res);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res = vector<int>();
inorder(root,res);
return res;
}
};
1) Vector
vector(向量)是一个封装了动态大小数组的顺序容器。能够存放各种类型的对象(注:一个容器中所有对象必须是同一种类型的)。可认为vector是一个能够存放任意类型的动态数组,可添加和删除数据(因为动态,所以相比数组节省空间)。
//创建vector
vector<int> v1;
//增加vector
v1.push_back(20);
//向量中迭代器指向元素前增加一个元素x
v1.insert(v1.begin() + 1, 5);
//删除向量中迭代器指向元素
v1.erase(v1.end() - 1);
//删除向量中[first, last)中元素
v1.erase(v1.begin() + 1, v1.end() - 1);
//删除向量中最后一个元素
v1.pop_back();
//清空
v1.clear();
//访问
int a = v1.at(2);
//遍历
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
C++ vector的常见用法详解(超详细)(o)/~
C++ vector的用法文档
C++中vector的用法详解
0.5h
101. 对称二叉树
/**
* 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:
bool check(TreeNode* r1, TreeNode* r2){
if(!r1 && !r2) return true;
if(!r1 || !r2) return false;
return r1->val==r2->val && check(r1->left,r2->right) && check(r1->right,r2->left);
}
bool isSymmetric(TreeNode* root) {
return check(root->left,root->right);
}
};
思路:拆成递归问题 两个移动节点 注意二叉树需要存储值时只关注对应节点及下一步节点转移,不需要考虑上下节点返回值问题。二叉树对称对比时,需要考虑整体的正确与否,所以需要绑定上下节点的布尔返回值。
return r1->val==r2->val && check(r1->left,r2->right) && check(r1->right,r2->left);
0.5h
104. 二叉树的最大深度
/**
* 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 dfs(TreeNode* root){
if (root==nullptr){
return 0;
}
return max(dfs(root->left),dfs(root->right))+1;
}
int maxDepth(TreeNode* root) {
return dfs(root);
}
};
思路:dfs
0.3h
121. 买卖股票的最佳时机
class Solution {
public:
int maxProfit(vector<int>& prices) {
int min=*prices.begin();
int cha=0;
int temp=*prices.begin();
for(vector<int>::iterator it=prices.begin()+1;it!=prices.end();it++){
if(*it>temp){
if(*it-min>cha){
cha=*it-min;
}
}else{
if(*it<min){
min=*it;
}
}
temp=*it;
}
return cha;
}
};
活用 max() min() for(int price: prices)
0.4h
136. 只出现一次的数字
class Solution {
public:
int singleNumber(vector<int>& nums) {
int temp=0;
for(int n:nums){
temp=temp^n;
}
return temp;
}
};
思路:异或