剑指 Offer 32 - II. 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
题解
- 判断root == NULL,如果true说明是空树直接返回结果 ;
- 维护一个队列queue<TreeNode*> ,记录的是树中每一层的节点 ;
- 遍历队列,就是遍历树的一层所有节点,取出所有节点的val保存 ,此时额外维护一个数组vector< int > temp,用于记录一下当前层的的信息,因为要求是每一层的节点保存在一个数组中;
- 特判一下当前节点的左右子树是否为NULL,如果不为NULL,入队,队列维护下一层!
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res ;
if(root == NULL) return res ;
queue<TreeNode*> q ; // 维护一个队列
q.push(root) ; // 初始化队列
while(!q.empty()){
vector<int> temp ;
for(int i = q.size() ; i ; i --){
auto node = q.front() ;
temp.push_back(node -> val) ;
q.pop() ; //移除队头
if(node -> left != NULL) q.push(node -> left) ;
if(node -> right != NULL) q.push(node -> right) ;
}
res.push_back(temp) ;
}
return res ;
}
};