二叉树层序遍历
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
提示:
0 <= 二叉树的结点数 <= 1500
/**
* 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来存[3];
第二层,用一个vector[9,20];
第三层,用一个vector[15,7].
这样的话,我们就一层一层的遍历,相较于普通的层序遍历,普通的层序遍历在 ==while(队列不空)==循环里面,是每次pop()一个结点的。(不知道这个能不能想明白),我们在这里,我们在==while(队列不空)==这个循环里面就一层一层的pop(),这样就可以记录每一层的了。
先这样想,看看代码就懂了;
/**
* 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> > ans;
//空的
if ( root == NULL ) return ans;
//队列
queue<TreeNode*> q;
q.push(root);
//队列不空
while ( !q.empty() ) {
int size = q.size();//记录当前一层的个数
vector<int> v;
while (size--) { //把一层的全部pop,再把下一层加进来
TreeNode *temp = q.front();
q.pop();
v.push_back(temp->val);
//把下一层的结点入队
if ( temp->left ) q.push(temp->left);
if ( temp->right ) q.push(temp->right);
}
if ( v.size() ) ans.push_back(v);
}
return ans;
}
};
是不是很简单!!!🤣🤣🤣🤣🤣🤣🤣