题目来源:力扣
题目描述:
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
代码:
vector> levelOrder(TreeNode* root) {
vector> vv;
queue q;
int levelSize = 0;
if(root){
q.push(root);
levelSize=1;
}
while(!q.empty()){
//一层一层出
vector v;
for(int i=0;ival);
if(front->left)
q.push(front->left);
if(front->right)
q.push(front->right);
}
vv.push_back(v);
levelSize = q.size();
}
return vv;
}
思路:
我们用该图举例,我们使用一个队列,队列用来存储节点,和一个levelSize来控制,levelSize是一层的个数
我们控制一层一层的出
我们先把根节点入进入,只要二叉树没问题,第一层一定只有一个,所以levelSize为1
也就是3入队列,接着我们把3出队列,levelSize-1,变为0,入第二层的9和20,出队列时使用循环来出,第二层进队列后,levelSize为2,然后我们出第二层,9先出来,然后levelSize--,变为1,然后入9的下一层节点,10,然后出20,入20的下一层,15和7,levelSize变为0,变为0后第三层也全入队列了,然后levelSize变为3
代码开始是这样的,这样的问题是我们每次出一个,哪个数据是哪一层的,所以我们在while循环里再加一层for循环
出for循环后,把levelSize修正,使用q.size
接着我们把每一层的数据push到vector里
最后我们把每一层的vector放入到vector里,变成vector
还有一种思路是使用两个队列,但没有这种写的舒服,我们使用一个levelSize就解决了