题目:
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
方法:二叉树的层序遍历感觉是相对简单的,只需要定义一个队列,从根节点开始放入队列中,随后出队,将当前元素的左孩子节点和右孩子节点分别放入栈中,并将该节点放入结果数组中。提前计算下一层的宽度(即队列中的元素个数),定义一个数组用来存放下一层的节点元素。继续处理下一层的节点,方法和上面一样,一直重复操作直到队列为空,即所有的树节点都被处理完了。
题解:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
if (root != NULL) que.push(root);
vector<vector<int>> result; //定义结果数组,是个二维数组
while(!que.empty()){
int size = que.size();
vector<int> vec;
for(int i= 0; i<size; i++){ //遍历每一层
TreeNode* node = que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left); //当前节点的左孩子进队
if(node->right) que.push(node->right); //当前节点的右孩子进队
}
result.push_back(vec);
}
return result;
}
};