借助队列实现
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> res;
if(root==NULL)
return res; //注意这一步
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
q.front();
res.push_back(q.front()->val);
if(q.front()->left!=NULL)
q.push(q.front()->left);
if(q.front()->right!=NULL)
q.push(q.front()->right);
q.pop();
}
return res;
}
附:deque和queue的用法
C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是 必要的,容器类型是可选的,默认为deque 类型。
C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。
C++队列Queue类成员函数如下:
back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数
queue入队,如例:q.push(x); 将x 接到队列的末端。
queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问queue队首元素,如例:q.front(),即最早被压入队列的元素。
访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。
判断queue队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
容器deque和vector非常相似,操作函数基本一致。它采用动态数组来管理元素,提供随机存取,可以在头尾两端进行快速安插和删除元素操作。特别 要注意,除了头尾两端,在任何地方安插与删除元素,都将导致指向deque元素的任何pointers references iterators 失效。
包括的头文件为:
#include <deque>
using namespace std;
声明一个deque时,一般需要前缀std::
因为类型deque是一个定义在namespace std内的template 。
构造函数:
deque<Elem> c
deque<Elem> c1(c2); //产生另一个同型deque的副本(所有元素都被拷贝)
deque<Elem> c(n) ;
deque<Elem> c(n , elem) ;
dequer<Elem> c(begin,end); //产生一个deque,以区间[begin ; end]
析构函数:
c.~ deque<Elem>()
非变动性操作
c.size();
c.empty();
c.max_size();
c.at(idx) ;
c[idx] ;
c.front() ;
c.back();
c.begin();
c.end();
变动性操作:
c1 = c2
c.assign(n , elem);
c.assing(beg , end);
c.push_back(elem);
c.pop_back()
c.push_front()
c.pop_front()
c.erase(pos)
c.insert(pos , elem);
c.insert(pos , n , elem); //在pos位置插入n个元素elem,无返回值
c.insert(pos , beg , end);
c.resize(num);
c.resize(num , elem);
c.clear();
PS:Deque和Vector是智能容器,删除或者增加元素时,其他位置与元素会进行相应的移动。