剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
题解:
- 判断root == NULL,如果true说明是空树直接返回结果 ;
- 维护一个队列queue<TreeNode*> , 记录的是树中每一层的节点 ;
- 遍历队列,就是遍历树的一层所有节点,取出所有节点的val保存 ;
- 特判一下当前节点的左右子树是否为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<int> levelOrder(TreeNode* root) {
vector<int> res ;
if(root == NULL) return res ;
queue<TreeNode*> q ;
q.push(root) ;
while(!q.empty()){
for(int i = q.size() ; i ; i --){
auto node = q.front() ;
q.pop() ;
res.push_back(node -> val) ;
if(node -> left !=NULL) q.push(node -> left) ;
if(node -> right != NULL) q.push(node -> right) ;
}
}
return res ;
}
};