给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
//借助一个队列,将根节点push进去,pop同时将该节点的左右子节点push到队列中,然后在pop同样带进自己的子节点。当子节点为空时pop的时候没有节点进到队列中,当队列为空时,遍历结束
class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public:
vector<vector<int>> levelOrder(TreeNode *root) {
// write your code here
vector<vector<int>> v;
queue<TreeNode*> q;
if(root==NULL)
{
return v;
}
q.push(root);
int len=1;
while(!q.empty())
{
vector<int> s;
len=q.size();//表示该层的节点数
//将下一层的节点都push到队列中。
while(len--)
{
TreeNode* temp=q.front();
s.push_back(temp->val);
q.pop();
if(temp->left)
{
q.push(temp->left);
}
if(temp->right)
{
q.push(temp->right);
}
}
v.push_back(s);
}
}
};
//要这样这样的二维数组,每一行表示每一层的节点,那每次从队列pop的时候知道该层有几个节点,我们就pop几次,同时将自己的左右节点带入。