题目描述:
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
解题思路:
1、层级遍历:BFS
- BFS代码熟悉,借助队列
2、换行输出:二维数组
- 每一行的数据存在一维数组里
- 数组的长度:在上一层节点弹出,这一层节点全部push进队列的长度;
- for循环遍历一维数组,打印弹出,包括该孩子进队;
- 一维数组弹出完毕push_back到二维数组中;
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class TreePrinter {
public:
vector<vector<int> > printTree(TreeNode* root) {
// write code here
vector<vector<int>> result;
if(root == nullptr)
return result;
// BFS + 换行;
queue<TreeNode* > q1;
q1.push(root);
while(!q1.empty()){
int len = q1.size();
vector<int> row;
for(int i=0;i<len;i++){
TreeNode* node = q1.front();
q1.pop();
row.push_back(node->val);
if(node->left) q1.push(node->left);
if(node->right) q1.push(node->right);
}
result.push_back(row);
}
return result;
}
};