问题:将二叉树节点按层遍历,每层节点从左至右遍历。
解题思路:利用队列的先进先出特点,从根节点开始遍历。
1)将节点(第一次是根节点)放入队列中;
2) 将该节点的左孩子和右孩子放入到队列中(若左孩子与右孩子均存在);
3)从队列中弹出该节点,接着访问队列中下一个元素的左孩子和右孩子,若存在则加入到队列中;
4)循环1)~3)便可按层从左至右遍历二叉树所有节点。
附加:C++之队列:
存在于C++的<queue>头文件中。
1)定义:queue<int> q;
常用操作:q.empty():如果队列为空返回true,否则返回false
<span style="white-space:pre"> </span> q.size():返回队列中元素的个数
<span style="white-space:pre"> </span> q.pop():删除队列首元素但不返回其值
<span style="white-space:pre"> </span> q.front():返回队列首的元素,但不删除该元素
<span style="white-space:pre"> </span> q.push():在队尾压入新元素
<span style="white-space:pre"> </span> q.back():返回队列尾元素的值,但不删除该元素
具体实现代码如下所示:
vector<int> PrintFromTopToBottom(TreeNode *root) {
queue<TreeNode*> que;
vector<int> vec;
vec.clear();
if(root)
que.push(root);
while(!que.empty()){
root=que.front();
vec.push_back(root->val);
que.pop();
if(root->left)
que.push(root->left);
if(root->right)
que.push(root->right);
}
return vec;
}