剑指offer_2020_9_13

剑指 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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值