题目描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7},
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
// 层序遍历,利用队列,先进先出
// 利用一个二维数组,存储每层节点
vector<vector<int>> res;
if(root == NULL){
return res;
}
queue<TreeNode*> level;
//vector void push_back(const T& x):向量尾部增加一个元素X
// queue void push()
// bool empty() const:判断向量是否为空,若为空,则向量中无元素
level.push(root);
while(!level.empty()){
vector<int> subRes;
int size = level.size();
// 遍历该层
while(size--){
// 取队首
TreeNode* temp = level.front();
// 队首出队
level.pop();
// 队首入层序遍历的子集合
subRes.push_back(temp->val);
// 队首左右非空子树入队
if (temp->left)
level.push(temp->left);
if(temp->right)
level.push(temp->right);
}
// 当层的节点数不为空时,加入结果集
if(subRes.size() > 0)
res.push_back(subRes);
}
return res;
}
};
错因分析
- 判断root为空时,返回了NULL导致编译错误
- 在往队列里加入节点时,没有判断非空,导致段错误