题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
解答——queue
使用queue
的话,操作就是pop()
、push()
push()
始终在队列后面插入一个元素
pop()
始终在队列的前面删除一个元素
front()
返回队列前面的元素的值
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> que; //新建一个数组
queue<TreeNode*>q; //新建一个队列
TreeNode* fr; // 新建一个树结点
if(root==NULL) //当root为空时,返回一个空的数组
return que;
q.push(root); //把root放入队列
while(!q.empty()) //当队列不为空时
{
fr=q.front(); //fr等于队列的第一个元素
que.push_back(fr->val); //数组中存放第一个元素的值
if(fr->left!=NULL) //如果左结点不为空
q.push(fr->left); //放入队列
if(fr->right!=NULL) //如果右结点不为空
q.push(fr->right); //放入队列
q.pop(); //因为第一个元素已经赋值给了fr,所以弹出第一个元素
}
return que;
}
};
解答——deque
使用deque
的话,操作就是push_back()
、pop_front()
push_back()
把元素放到队列的末尾
pop_front()
弹出队列的第一个元素
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> que; //新建一个数组
deque<TreeNode*>q; //新建一个队列
TreeNode* fr; // 新建一个树结点
if(root==NULL) //当root为空时,返回一个空的数组
return que;
q.push_back(root); //把root放入队列
while(!q.empty()) //当队列不为空时
{
fr=q.front(); //fr=队列的第一个元素
que.push_back(fr->val); //数组中存放第一个元素的值
if(fr->left!=NULL) //如果左结点不为空
q.push_back(fr->left); //放入队列
if(fr->right!=NULL) //如果右结点不为空
q.push_back(fr->right); //放入队列
q.pop_front(); //因为第一个元素已经赋值给了fr,所以弹出第一个元素
}
return que;
}
};