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。