当前位置: 首页 > news >正文

024.二叉树层序遍历

二叉树的层序遍历就是Bfs(广度优先搜索)

因为步长一致

框架:

    queue<TreeNode*>qu;qu.push(root);while(!qu.empty()){int siz=qu.size();//当前层结点数量for(int i=0;i<siz;++i){//当前层结点全部出队auto cur=qu.front();qu.pop();//下一层结点入队if(cur->left!=nullptr){qu.push(cur->left);}if(cur->right!=nullptr){qu.push(cur->right);}}}

应用

借助层序遍历,我们可以自然地知道每个结点在第几层

如果题目要求我们在水平方向上进行操作,那十有八九需要用到层序遍历的思想

只需:

    queue<TreeNode*>qu;qu.push(root);int depth=0;//这里假设root深度为 1 ,若root深度为0这里初始化depth=-1即可while(!qu.empty()){depth++;//进入下一层int siz=qu.size();for(int i=0;i<siz;++i){auto cur=qu.front();qu.pop();if(cur->left!=nullptr){qu.push(cur->left);}if(cur->right!=nullptr){qu.push(cur->right);}}}

题目1

leetcode 117

给定一个二叉树:

struct Node {int val;Node *left;Node *right;Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点

如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

class Solution {
public:Node* connect(Node* root) {if(root==NULL)return NULL;queue<Node*>q;q.push(root);while(q.size()){int siz=q.size();Node*p=NULL;//对每一层设置一个前置结点for(int i=0;i<siz;++i){auto c=q.front();q.pop();if(p!=NULL)p->next=c;//跳过最左边的结点p=c;if(c->left)q.push(c->left);if(c->right)q.push(c->right);}}return root;}
};

题目2

leetcode 958

给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树

在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)中可以包含 1 到 2h 个节点

直接说思路:

允许nullptr结点入队,当弹出第一个nullptr时说明层遍历结束,此时队列中因该只剩下nullptr

如果后面还有非空结点,说明不是完全二叉树

class Solution {
public:bool isCompleteTree(TreeNode* root) {queue<TreeNode*>q;q.push(root);bool end=0;while(q.size()){int siz=q.size();for(int i=0;i<siz;++i){auto c=q.front();q.pop();if(c==nullptr)end=1;//弹出空结点else{if(end)return 0;//当前结点非空且之前弹出过空结点//这里我们运行nullptr结点入队q.push(c->left);q.push(c->right);}}}return 1;//处理到这里说明合法}
};

题目3

leetcode 919

思路

两个队列q,qu

q 中存储有空孩子的结点,即:->leftnullptr || ->rightnullptr

qu 用于初始化,找到有空孩子的结点

需要 insert 新结点时 : 弹出 q.front() ,让新节点成为它的孩子,孩子满了就出队

同时新插入的结点也没有孩子,进入 q

class CBTInserter {TreeNode*root;int de;queue<TreeNode*>q;
public:CBTInserter(TreeNode* root) {this->root=root;queue<TreeNode*>qu;qu.push(root);while(qu.size()){int siz=qu.size();for(int i=0;i<siz;++i){auto c=qu.front();qu.pop();if(c->left)qu.push(c->left);if(c->right)qu.push(c->right);if(c->left==nullptr||c->right==nullptr)q.push(c);}}}int insert(int val) {TreeNode*node=new TreeNode(val);auto c=q.front();int v=c->val;if(c->left==nullptr)c->left=node;else if(c->right==nullptr){c->right=node;q.pop();}q.push(node);return v;}TreeNode* get_root() {return root;}
};
http://www.gsyq.cn/news/159125.html

相关文章:

  • mybatis insert后返回id
  • Java面试:为何必须在循环中检查等待条件?避坑指南!
  • Android 12 RK3588平台电源菜单深度定制指南
  • 千万不能忽视!选择口碑好的实验室净化机构有多重要
  • 实验室净化?选这家供应商就对了
  • 2025年12月江苏徐州变压器系列、智能变电站、新能源配套、高低压配电柜、智慧电力系统推荐榜单:顶尖企业综合评估 - 2025年品牌推荐榜
  • comsol悬浮绝缘子电场计算模型,可以得到绝缘子各个部位电势及电场分布,提供comsol详细...
  • !AI领域火爆!求职人数激增33.4%,AI工程师月薪高达3.5万元,你还在等什么?
  • 2025年封切收缩机厂家实力推荐:套袋机/包装机/码垛机源头厂家精选 - 品牌推荐官
  • 凌晨兩點的覺悟:當AttributeError成為我擁抱Type Hints的轉折點
  • 2025年12月金属熔剂/合金金属熔剂/金属添加剂/厂家综合评测 - 2025年品牌推荐榜
  • ModelEngine的Nexent智能体【娱乐生涯 AI 助手】落地实施测试——看看你35岁能否成为天王巨星
  • 2025年12月成都米粉/米线/绵阳米粉加工厂口碑榜单 - 2025年品牌推荐榜
  • 基于Spring Boot和Vue.js的视频点播管理系统设计与实现
  • 运用 Python 将 Markdown 转换为 Word、HTML、PDF、PNG 和 JPG
  • CF1295F Good Contest/[APIO2016] 划艇
  • 2025最新!自考党必看9个AI论文平台测评与推荐
  • 2025年图书档案标签厂家实力推荐:超高频抗金属标签/耐高温电子标签/rfid标签定制厂家精选 - 品牌推荐官
  • 上海策划品牌全案公司推荐:4事业部+长期陪跑(案例集) - 品牌排行榜
  • 告别传统低效!AgentRun 如何用 Serverless + Agent 打造现代化的舆情分析系统?
  • 2025年蠕变持久试验机生产厂家推荐:哪家公司靠谱/国内哪家性价比高/哪个厂家品质好/哪家售后好 - 品牌推荐大师1
  • 学长亲荐9个AI论文工具,研究生轻松搞定开题报告!
  • 西门子模拟量处理程序块:滤波峰值,便捷调用报警功能,适用于博图V15及以上版本
  • 模型没挂,是我自己把系统搞死的
  • c# 递归算法
  • 12.24模拟赛
  • 【golang】goland使用多版本go sdk的方法
  • 2025年12月三圣乡团建/宴席/婚宴/团建聚会/寿宴场地推荐排行榜单 - 2025年品牌推荐榜
  • 2025年市面上头部仓库货架生产商排行榜,中型货架/仓库货架/层板货架/重型货架/自动化立体库货架,仓库货架供货厂家排名 - 品牌推荐师
  • 超时宏定义