这个必须得记录一下,尝试了一上午,经过n次的timeout之后结果,也没有找到前人合适的code。
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
/**
* 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(0);
if(!root) return res;
int row = 1;//树的第row行
int nonull = 0;//当前队列中非空节点
int last_nonull = 0;//当前第row行中的非空节点数量
//construct queue
std::deque<TreeNode*> que;
que.push_back(root);
nonull++;
last_nonull = nonull;
while(nonull > 0){
vector<int> temp_vec;
res.resize(row);
int this_nonull = 0;//当前层中已经遍历过的非空节点个数
while(this_nonull < last_nonull)
{
this_nonull++;
temp_vec.push_back(que.front()->val);
if(que.front()->left){
que.push_back(que.front()->left);
nonull++;
}
if(que.front()->right){
que.push_back(que.front()->right);
nonull++;
}
nonull--;
que.pop_front();
}
res[row-1] = temp_vec;
row++;
last_nonull = nonull;
}
return res;
}
};