1、从上到下打印二叉树
https://blog.csdn.net/HYAIWYH/article/details/127475690
层序遍历,广度优先算法
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
//层序
queue<TreeNode*> que;
vector<int> result;
if(root!=NULL) que.push(root);
while(!que.empty())
{
int size=que.size();
while(size--)
{
TreeNode* node=que.front();
que.pop();
result.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
}
return result;
}
};
2、从上到下打印二叉树II
和1一样,仍然用层序
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode*> que;
if(root!=NULL) que.push(root);
while(!que.empty())
{
int size=que.size();
vector<int> v1;
while(size--)
{
TreeNode* node=que.front();
que.pop();
v1.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
result.push_back(v1);
}
return result;
}
};
3、从上到下打印二叉树III
按之字形打印,添加一个标志位对奇偶行进行判断即可。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
//设置一个标志位i,为奇数从左到右,为偶数从右到左
vector<vector<int>> result;
queue<TreeNode*> que;
int flag=0;
if(root!=NULL) que.push(root);
while(!que.empty())
{
vector<int> v1;
int size=que.size();
while(size--)
{
TreeNode* node=que.front();
que.pop();
v1.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
//判断标志位
if(flag%2) result.push_back(vector<int>(v1.rbegin(),v1.rend()));
else result.push_back(v1);
flag++;
}
return result;
}
};