三道半leecode简单题。

leecode100
这是一道运用递归调用的题,最重要的是考虑好判断条件和调用cmp函数

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(q==NULL&&p==NULL)
        {
            return true;
        }
        if(q==NULL||p==NULL)
        {
            return false;
        }
        else if(p!=NULL||q!=NULL||p->val==q->val)
        {
            return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
        }
        return false;
    } 

};

leecode 101

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root==NULL)
        {
            return true;
        }
        return cmp(root,root);
    }
    bool  cmp(TreeNode *p,TreeNode *q)
    {
        if(p==NULL&&q==NULL)
        {
            return true;
        }
        if(p==NULL||q==NULL||p->val!=q->val)
        {
            return false;
        }
        return cmp(p->left,q->right)&&cmp(p->right,q->left);
    }

};

101是100的升级版,100只需要调用系统自带的函数,而101需要自己创建一个cmp函数,但是两道题的判断的条件基本一致,思路上也一致只需要将100中函数的双left改成一left,一right就可以了。这道题一开始想的是用中序遍历判断是否回文来做,可是中序遍历有的条件是不能判断,有大神评论说将每层压入栈中时标记就可以了,不过我现在还没有敲出来。提供一种思路。

leecode104

class Solution {
public:
    int maxDepth(TreeNode* root) {
        int i=0;
        if(root==NULL)
        {
            return 0;
        }
       
       return 1+max(maxDepth(root->left),  maxDepth(root->right));
       
    }
};

一开始准备用i,j来计数的不过发现计数的话只能遍历一次。
leecode107

class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
         vector<vector<int> > res;
            if(root==NULL)
                return res;
            queue<TreeNode*> que;
            que.push(root);//先将头结点放入

            while(!que.empty())
            {
                int s=0;
                int node_size=que.size();//这一步比着上一步是最重要的区别,目的是
                //先读出queue里面还有多少个节点,这个节点数就是每层的数,下面每层打印的时候
                //会把打印完的一层逐个扔掉。

                vector<int> r;
                while(s++<node_size)//s从0开始直到将queue中的数遍历完。
                {
                    TreeNode* t=que.front();
                    que.pop();
                    r.push_back(t->val);
                    if(t->left) que.push(t->left);
                    if(t->right) que.push(t->right);
                }
                res.push_back(r);
            }
            reverse(res.begin(),res.end());
            return res;
    }
};

这道题是从网上看到的,自己有的地方还没有想透,不过这道题的源码是没有将队列反转的,可是力扣上是要逆序输出的,所以我们只需要将队列用reverse函数来进行反转就可以了。下面是代码的转载链接。
https://zhuanlan.zhihu.com/p/77977139
总结
这是自己第一次写博客,用来见证自己的进步希望明年春招和秋招能找到自己心仪的offer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值