一、思路
这道题使用的是二叉树的广度优先遍历,也就是层次遍历。与单纯的层次遍历不同的地方在于,这个问题要求返回的遍历结果是一个二维数组,一行代表树的一层。但是总的思路还是和层次遍历没有区别。
为了知道二叉树中每一个节点位于书的哪一层的问题,需要标识每一个节点所在的层数,并根据层次遍历时的节点,对其子节点进行标识。在这里我想到的方法有两种:第一种是建一个队列保存节点的层数,与层次遍历的队列保持一一对应;第二种是建一个哈希表,来实现每一个节点和其层数之间的对应关系。这里的标识方法甚至都可以使用线性表,但是考虑到查找的效率太低,故不使用线性表。
二、代码
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
queue<int> qDepth;
vector< vector<int> > ans