• LeetCode 每日一题 102. 二叉树的层序遍历


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

    示例:

    二叉树:[3,9,20,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7
    

    返回其层次遍历结果:

    [
      [3],
      [9,20],
      [15,7]
    ]
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    BFS 遍历时记录当前层数即可。

    
    /**
     * 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;
        queue<pair<int, TreeNode*>>que;
        if(root != nullptr)
          que.push(make_pair(0, root));
        while(!que.empty()) {
          pair<int, TreeNode*> p = que.front();
          que.pop();
          if(ans.size() <= p.first) {
            ans.push_back(vector<int>(1, p.second->val));
          } else {
            ans[p.first].push_back(p.second->val);
          }
          if(p.second->left)
            que.push(make_pair(p.first + 1, p.second->left));
          if(p.second->right)
            que.push(make_pair(p.first + 1, p.second->right));
        }
        return ans;
      }
    };
    

    直接使用队列大小用作构建一层的 ans ,反倒更慢了(似乎 lc 的 O2 没开?)

    #pragma GCC optimize("O2")
    #pragma G++ optimize("O2")
    
    /**
     * 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;
        queue<TreeNode*>que;
        if(root != nullptr)
          que.push(root);
        while(!que.empty()) {
          const int size = que.size();
          ans.push_back(vector<int>(size));
          for(int i = 0;i < size;++i){
            TreeNode* tn = que.front();
            que.pop();
            ans.back()[i] = tn->val;
            if(tn->left) que.push(tn->left);
            if(tn->right) que.push(tn->right);
          }
        }
        return ans;
      }
    };
    
  • 相关阅读:
    让x86的android模拟器能模拟arm架构系统
    婴儿补充微量元素
    asterisk 能打电话的配置
    SIP协议错误代码大全
    asterisk错误排查
    asterisk帮助与国内论坛
    win10 只要打开文件对话框就卡死解决方法
    分享到朋友圈实现
    跳转前暂停几秒js如何实现
    Github css加载失败,样式混乱解决办法
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/12880389.html
Copyright © 2020-2023  润新知