剑指 Offer 28. 对称的二叉树
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)
return true;
return jingxiang(root->left,root->right);
}
bool jingxiang(TreeNode*root1,TreeNode*root2)
{
if(root1==NULL&&root2==NULL)
return true;
if(root1==NULL||root2==NULL)
return false;
return root1->val==root2->val&&jingxiang(root1->left,root2->right)&&jingxiang(root1->right,root2->left);
}
};
剑指 Offer 29. 顺时针打印矩阵
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>res;
if(matrix.empty()) return res;
else
{
int n=matrix.size();
int m=matrix[0].size();
//n行m列
int rl=0,rh=n-1,cl=0,ch=m-1;
while(1)
{
//从左到右
for(int i=cl;i<=ch;i++)
{
res.push_back(matrix[rl][i]);
}
if(++rl>rh)break;
//从上往下
for(int i=rl;i<=rh;i++)
{
res.push_back(matrix[i][ch]);
}
if(--ch<cl)break;
//从右往左
for(int i=ch;i>=cl;i--)
{
res.push_back(matrix[rh][i]);
}
if(--rh<rl) break;
//从下往上
for(int i=rh;i>=rl;i--)
{
res.push_back(matrix[i][cl]);
}
if(++cl>ch) break;
}
return res;
}
}
};
剑指 Offer 30. 包含min函数的栈
class MinStack {
public:
/** initialize your data structure here. */
stack<int>a;
stack<int>b;
MinStack() {
}
void push(int x) {
a.push(x);
if(b.empty()||b.top()>=x) b.push(x);
}
void pop() {
if(a.top()==b.top()) b.pop();
a.pop();
}
int top() {
return a.top();
}
int min() {
return b.top();
}
};
剑指 Offer 31. 栈的压入、弹出序列
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int>a;
int j=0;
for(int i=0;i<pushed.size();i++)
{
a.push(pushed[i]);
while(j<popped.size()&&!a.empty()&&a.top()==popped[j])
{
a.pop();
j++;
}
}
return j==popped.size();
}
};
剑指 Offer 32 - I. 从上到下打印二叉树
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
vector<int>res;
queue<TreeNode*>q;
if(root==NULL) return res;
q.push(root);
TreeNode*tmp;
while(!q.empty())
{
tmp=q.front();
q.pop();
res.push_back(tmp->val);
if(tmp->left!=NULL)
q.push(tmp->left);
if(tmp->right!=NULL)
q.push(tmp->right);
}
return res;
}
};