一、题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
解题思路:
- 这与一些二叉树遍历类型不一致,并且不能够借助函数自我递归
- 针对具体例子进行分析,对于下图二叉树,按照题目所要求的按层遍历的方法,输出结果为: 8,6,10,5,7,9,11
8
|
| |
6 10
| | | |
5 7 9 11
- 对具体实例分析,可得:先打印的节点,其左右节点也先打印,因此可考虑先进先出的队列进行实现。
- 具体为:每次打印一个节点,如果该节点有子节点,则将子节点加入到队列的末尾,将该节点挤出队列,再次进行上述操作。
二、实现代码
/*
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> data;
// 如果二叉树为空,则退出
if(!root)
return data;
//定义一个队列
std::deque<TreeNode*> dequeTree;
dequeTree.push_back(root);
//当队列中还存在元素则一直循环输出
while(dequeTree.size()){
//定义一个临时节点存储队列最前面的节点
TreeNode* tmp = dequeTree.front();
dequeTree.pop_front();
//输出队列中最前端节点的值
data.push_back(tmp->val);
//左右节点不为空的话,则将其加入到队列
if(tmp->left!=NULL){
dequeTree.push_back(tmp->left);
}
if(tmp->right!=NULL){
dequeTree.push_back(tmp->right);
}
}
return data;
}
};