zoukankan      html  css  js  c++  java
  • 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;
      }
    };
    
  • 相关阅读:
    经典SQL语句
    PL/SQL第二课(作业)
    CVS的使用(一课时)
    无法连接到Visual Studio 的Localhost Web服务器
    Oracle第三课(学习中笔记)
    PL/SQL第一课(学习笔记)
    Oracle第一课(学习中笔记)
    值类型——《.NET 2.0面向对象编程揭秘 》
    今日无事,将一同志之毕设完结
    第10组 Beta冲刺 (1/5)(组长)
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/12880389.html
Copyright © 2011-2022 走看看