LeetCode 102 二叉树的层次遍历

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsszwc/article/details/87951826

题目:

https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

题意:

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

思路:

层次遍历,可以通过依次入队出队实现,也就是用一个队列即可,如何区分不同层?可以发现队列中任何时候所有节点也只能属于两层,不能更多层了。所以用两个变量 c u r cur n e x t next c u r cur 记录队列中当前层节点的个数, n e x t next 记录队列中下一层节点的个数,当 c u r = = 0 cur==0 时,把遍历到的节点组装成一个 v e c t o r vector ,就是当前层的所有节点。然后更新 c u r cur n e x t next ,遍历下一层,循环往复

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> ans;
        vector<int> temp;
        if(root == nullptr) {
            return ans;
        }
        
        queue<TreeNode*> que;
        int cur = 0, nex = 0;
        que.emplace(root);
        cur++;
        
        while(!que.empty()) {
            TreeNode* p = que.front(); que.pop();
            temp.emplace_back(p->val);
            cur--;
            if(p->left) {
                que.emplace(p->left);
                nex++;
            }
            if(p->right) {
                que.emplace(p->right);
                nex++;
            }
            if(cur == 0) {
                swap(cur, nex);
                ans.emplace_back(temp);
                temp.clear();
            }
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/jsszwc/article/details/87951826
今日推荐