102.二叉树的层序遍历-C++

题目来源:力扣

题目描述:
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

102.二叉树的层序遍历-C++_第1张图片

 代码:

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;
    }

思路:

102.二叉树的层序遍历-C++_第2张图片
我们用该图举例,我们使用一个队列,队列用来存储节点,和一个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

102.二叉树的层序遍历-C++_第3张图片

代码开始是这样的,这样的问题是我们每次出一个,哪个数据是哪一层的,所以我们在while循环里再加一层for循环

102.二叉树的层序遍历-C++_第4张图片

出for循环后,把levelSize修正,使用q.size 

102.二叉树的层序遍历-C++_第5张图片

接着我们把每一层的数据push到vector里 

102.二叉树的层序遍历-C++_第6张图片

最后我们把每一层的vector放入到vector里,变成vector

还有一种思路是使用两个队列,但没有这种写的舒服,我们使用一个levelSize就解决了

你可能感兴趣的:(c++,算法,数据结构)