二叉树的层序遍历

    技术2022-07-16  58

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

    解题思路:

    将根节点放入队列中,在出队列后判断根节点是否存在左右孩子,如果存在就依次入队列,根节点出队列就相当于第一层遍历完成

    第一层节点遍历完成后,第二次所有的节点都已经全部入队列

    必须一次性将该层的所有节点遍历完,下一次所有的节点入队列

    int levesize = q.size();  // 每一层节点的个数

    for(int i = 0; i< levesize; i++)

    {

    取队头元素

    遍历该元素

    如果该元素有左孩子,则入队列

    如果该元素有右孩子,则入队列

    }

    代码如下:

    class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> ret; // 树空 if(nullptr == root) { return ret; } // 树不空 queue<TreeNode*> q; q.push(root); while(!q.empty()) { size_t levesize = q.size(); vector<int> v; // 保存一层中的元素 for(size_t i = 0; i < levesize; i++) { TreeNode* cur = q.front(); q.pop(); v.push_back(cur->val); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } ret.push_back(v); } return ret; } };

     

     

    Processed: 0.009, SQL: 10