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

【算法专题训练】28、队列与二叉树层序遍历

1、LCR 045. 找树左下角的值

题目信息:

  • https://leetcode.cn/problems/LwUNpT/description/
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。示例 1:
输入: root = [2,1,3]
输出: 1示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7提示:
二叉树的节点个数的范围是 [1,104]
-231 <= Node.val <= 231 - 1

解题思路:

  • 1、审题:输入一棵二叉树,要求该二叉最低一层最左边节点的数值
  • 2、解题:双队列解法
  • 对二叉树进行层序遍历,使用两个队列保存遍历到的每一层的结点值
  • 在遍历完一层结点后,取出队列的队头元素,该值就是这一层最左边的结点值

代码实现:

int findBottomLeftValue(TreeNode *root)
{std::queue<TreeNode *> queue1;std::queue<TreeNode *> queue2;queue1.push(root);int bottomLeft = queue1.front()->val;while (!queue1.empty()){// 取出1队列的头结点,并出队列TreeNode *node = queue1.front();queue1.pop();if (node->left != nullptr){queue2.push(node->left);}if (node->right != nullptr){queue2.push(node->right);}if (queue1.empty() && !queue2.empty()){ // 队列1全部遍历完成,赋值队列2的数据给到队列1queue1 = queue2;queue2 = std::queue<TreeNode *>();bottomLeft = queue1.front()->val;}}return bottomLeft;
}

2、LCR 046. 二叉树的右视图

题目信息:

  • https://leetcode.cn/problems/WNC0Lk/description/
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]示例 2:
输入: [1,null,3]
输出: [1,3]示例 3:
输入: []
输出: []提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100

解题思路:

  • 1、审题:
  • 输入一棵二叉树,想象自己站在树的右侧看这棵二叉树,则看到的是二叉树每一层最右边结点的值,将每一层的值从根节点往下放入队列中返回
  • 2、解题:
  • 还是二叉树的层序遍历,使用双队列解法,每一层遍历结束都将下一层队列中的最后一个元素取出来, 该元素就是每层最右边结点

代码实现:

vector<int> rightSideView(TreeNode *root)
{std::queue<TreeNode *> queue1;std::queue<TreeNode *> queue2;std::vector<int> res;if (root == nullptr){return res;}queue1.push(root);res.push_back(queue1.back()->val);while (!queue1.empty()){TreeNode *node = queue1.front();queue1.pop();if (node->left != nullptr){queue2.push(node->left);}if (node->right != nullptr){queue2.push(node->right);}if (queue1.empty() && !queue2.empty()){queue1 = queue2;queue2 = std::queue<TreeNode *>();res.push_back(queue1.back()->val);}}return res;
}

3、总结

  • 二叉树的层序遍历,要知道每一层有哪些节点数据,之前有使用到计数法,发现使用双队列方式更加简便
  • 使用两个队列交替保存当前层和下一层的结点数据,并不断将队列1中的元素出队列操作。
http://www.dtcms.com/a/542192.html

相关文章:

  • 软考~系统规划与管理师考试——真题篇——章节——第11章 信息系统治理——解析版
  • 基于java的教学资源管理系统(代码+数据库+LW)
  • 【LeetCode】90. 子集 II
  • 做公司网站阿里网站建设及维护服务
  • 用html做班级网站网站推广策划方案的主要内容?
  • MySQL忘记root密码或者root密码错误
  • “三断”极端环境下,自组网通信如何赋能关键领域救援?
  • 模板网站最大缺点网站建设公司咨
  • AI大模型-深度学习相关概念
  • 网站建设有前途wordpress汉化自适应主题
  • 统计 vs 机器学习:从参数到模式识别的转变
  • 做网站时版权怎么写青岛最新发生的新闻
  • 做自媒体的网站名字中英文网站如何做思路
  • 什么网站可以做单词书汽车之家汽车报价大全网页版
  • 廊坊永清网站建设什么网站可以做外贸
  • 贵州城乡建设厅城乡建设网站手机网站建设用乐云seo
  • 太原网站科技公司大专千万不要报软件技术
  • MCP | LLM | Python类型的Stdio/SSE/HTTP模式的简单示例
  • 网站备案账号密码哪儿有那种网站
  • 育贤网站建设wordpress默认小工具
  • 代做淘宝联盟网站网站通知发送邮件
  • 增强版计算机管理脚本
  • 动易网站后台管理系统wordpress homepage plugin
  • 招聘网站对比这么做网站开发实训的心得
  • 河南平台网站建设制作云南网络营销公司
  • 三维重建【0-C】3D Gaussian Splatting:相机标定原理与步骤
  • 好的建站平台简述网站建设的主要内容
  • 公司网站无法收录百度推广是干什么的
  • 可上传多个视频的网站建设沈阳制作网站建站
  • 百度提交网站多久收录怎么搭建个人博客