首页 > 其他分享 >102. 二叉树的层序遍历

102. 二叉树的层序遍历

时间:2024-11-15 16:56:29浏览次数:1  
标签:node right TreeNode cur 层序 next 二叉树 102 left

  1. 题目链接

  2. 解题思路

    • 层序遍历就是用队列,本题需要一层一层收集答案,所以我们可以用一个变量cur,表示该层还剩多少节点需要收集,同时,遇到一个节点,还要将其孩子节点放入队尾。那么我们怎么知道下一层的节点个数,所以还需要一个变量next,记录下一层的节点个数。

    • 总结一遍:每次从队头拿出一个节点A,然后把孩子节点放入队尾,每当有一个孩子节点,next++,然后cur--,如果cur == 0代表这一层的答案已经收集完毕,所以可以跳到下一层,即cur = next; next = 0;

    • 代码

      /**
       * Definition for a binary tree node.
       * struct TreeNode {
       *     int val;
       *     TreeNode *left;
       *     TreeNode *right;
       *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
       *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
       *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
       * };
       */
      class Solution {
      public:
          vector<vector<int>> levelOrder(TreeNode* root) {
              vector<vector<int>> ans;
              if (root == nullptr) {
                  return ans;
              }
              int cur = 1;
              deque<TreeNode *> deq;
              deq.push_back(root);
              int next = 0;
              vector<int> tmp;
              while(!deq.empty()) {
                  TreeNode *cur_node = deq.front();
                  deq.pop_front();
                  if (cur_node->left != nullptr) {
                      deq.push_back(cur_node->left);
                      next++;
                  }
                  if (cur_node->right != nullptr) {
                      deq.push_back(cur_node->right);
                      next++;
                  }
                  tmp.push_back(cur_node->val);
                  cur--;
                  // 本层结束了
                  if (cur == 0) {
                      ans.push_back(tmp);
                      tmp.clear();
                      cur = next;
                      next = 0;
                  }
              }
              return ans;
          }
      };
      

标签:node,right,TreeNode,cur,层序,next,二叉树,102,left
From: https://www.cnblogs.com/ouyangxx/p/18548283

相关文章

  • LeetCode654.最大二叉树
    LeetCode刷题记录文章目录......
  • 数据结构 ——— 利用前序序列重建链式二叉树
    目录题目要求链式二叉树示意图​编辑代码实现 题目要求读入用户输入的一串前序遍历的字符串,根据此字符串建立一个链式二叉树例如前序遍历的字符串为:ABC##DE#G##F###;其中"#"表示空树链式二叉树示意图以此图的链式二叉树为例子那么此链式二叉树前序遍历转换为字符......
  • 基于FPGA的1024QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置
    1.算法仿真效果vivado2019.2仿真结果如下(完整代码运行后无水印): 设置SNR=40db   将数据导入matlab显示星座图:   设置SNR=35db   将数据导入matlab显示星座图:   仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要     ......
  • 力扣—543.二叉树的直径
    543.二叉树的直径给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取......
  • 代码随想录——二叉树17-路径总和
    这两道题目对于递归函数的返回值是不同的,这里进行总结,二叉树遍历中递归函数返回值何时有何时没有。这里总结如下三点:如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是路径总和ii)如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需......
  • 力扣 653. 两数之和 IV 二叉树/binary-tree two-sum IV
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续序列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • 全局平衡二叉树 (GBST) 小记
    全局平衡二叉树(GBST)小记以下全局平衡二叉树简称\(\text{GBST(GlobelBalancedSearchTree)}\)。我认识的大多数人,对\(\text{GBST}\)的理解基本上都是静态\(\text{LCT}\),或者静态\(\text{TopTree}\),不过我对\(\text{LCT}\)的理解可能还差一点,所以我不打算从阉割\(......
  • gym103102H AND = OR 题解
    非常巧妙的一个题。我们首先考虑单组询问该怎么做。首先需要注意到一个结论,即设答案为\(x\),那么对于\(\forally<x\),\(y\)都应该放在与组;同样的,对于\(\forally>x\),\(y\)都应该放在与组。进一步的,我们观察在\(\text{popcount}\)上也有同样的性质,即对于\(\forally,......
  • 计算二叉树(二叉链表)的带权路径长度
    方法1#include<bits/stdc++.h>#defineintlonglong#definemod998244353usingnamespacestd;usingpii=pair<int,int>;typedefstructBtnode{ intdata; structBtnode*lc,*rc; }*Btree,Btnode;//笔试这个可以放上面,但是真的写程序应该把getwpl放在g......
  • 101. 对称二叉树
    题目链接解题思路检查一个二叉树是否轴对称,其实和根结点无关,而是和其左右子树有关。左子树头等于右子树头,然后递归调用,「左子树的右儿子」要等于「右子树的左儿子」并且「左子树的左儿子」要等于「右子树的左儿子」。代码/***Definitionforabinarytreenode.......