剑指 Offer 32 - II. 从上到下打印二叉树 II
题目链接:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如: 给定二叉树: [3,9,20,null,null,15,7],
3 / 9 20 / 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
提示:
- 节点总数 <= 1000
思路:
本题考察的是BFS(广度优先遍历)算法:我们借助队列的先进先出的特性,用队列存储上二叉树上的每个结点,借助一个vector数组存储结点上的值。
首先特判:当根结点为空时,直接返回[]
层次遍历+控制内层循环
内层:当一层中所有数都遍历一遍结束循环,遍历的同时将下一层的数加入到队列中
外层:当所有层遍历一遍结束循环
/** * 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; queue<TreeNode *> q; q.push(root); if(!root) return res; while(!q.empty()){ int col = q.size(); vector<int> tmp; while(col--){ TreeNode *p = q.front(); q.pop(); tmp.push_back(p->val); if(p->left!=NULL) q.push(p->left); if(p->right!= NULL) q.push(p->right); } res.push_back(tmp); } return res; } };
上一篇:
IDEA上Java项目控制台中文乱码