主要流程
确定root非空
根指针进队列
队列非空就一直循环
依次扫描目前队列中所有元素(新增的不算)
从队列取出第一元素
将值放入结果vector中
判断左右子节点非空,并依次入队
将本次结果放入二维数组中
如果需要按层逆序输出的话,在这里将二维结果倒排一下
返回二维结果
vector<vector<int>> levelorder(Tree* root) {
vector<vector<int>> res;
if (root == NULL) return res;
queue<Tree*> q;
q.push(root); // queue类似stack也是用push的
while (!q.empty()) {
vector<int> list;
int n = q.size();
for (int i=0; i<n; i++) {
Tree* cur = q.front();
q.pop();
list.push_back(cur->val);
if (cur->left) q.push(cur->left); //不用逆序
if (cur->right) q.push(cur->right);
}
res.push_back(list);
}
// 如果需要逆序结果,在这里倒排一下
// reverse(res.begin(), res.end());
return res;
}