提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天是跟着代码随想录刷题的第10天,今天依然是层次遍历的变种。
一、在每个树行中找最大值
思路:先给个最小的值,然后哪个大就把最大值给他、
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> result;
queue<TreeNode*> que;
if(root!=NULL) que.push(root);
while(!que.empty())
{
int max=INT_MIN;
int size=que.size();
while(size--)
{
TreeNode* a=que.front();
que.pop();
if((a->val)>max) max=a->val;
if(a->left) que.push(a->left);
if(a->right) que.push(a->right);
}
result.push_back(max);
}
return result;
}
};
二、填充每个节点的下一个右侧节点指针
思路:就是还是通过每一层的size,上一个节点指向下一个,到最后一个指向NULL。
class Solution {
public:
Node* connect(Node* root) {
queue<Node*> que;
vector<int> vec;
if(root!=NULL) que.push(root);
while(!que.empty())
{
int size=que.size();
while(size--)
{
Node* a=que.front();
que.pop();
if(size!=0)
{
Node* b=que.front();
a->next=b;
}
else a->next=NULL;
if(a->left) que.push(a->left);
if(a->right) que.push(a->right);
}
}
return root;
}
};
三、二叉树的最大深度
思路:i=0开始,每过一层+1,遍历到最后一层就能得到深度了。
class Solution {
public:
int maxDepth(TreeNode* root) {
vector<int> vec;
queue<TreeNode*> que;
int i=0;
if(root!=NULL) que.push(root);
while(!que.empty())
{
int size=que.size();
while(size--)
{
TreeNode* a=que.front();
que.pop();
if(a->left) que.push(a->left);
if(a->right) que.push(a->right);
}
i=i+1;
}
return i;
}
};
三、二叉树的最小深度
思路:只要遇到没有左右节点的直接得到最小深度。
class Solution {
public:
int minDepth(TreeNode* root) {
queue<TreeNode*> que;
int i=0;
if(root!=NULL) que.push(root);
while(!que.empty())
{
int size=que.size();
while(size--)
{
TreeNode*a=que.front();
que.pop();
if(a->left) que.push(a->left);
if(a->right) que.push(a->right);
if((!a->left)&&(!a->right))
{i=i+1;return i;}
}
i=i+1;
}
return NULL;
}
};