【面试HOT200】二叉树——广度优先搜索篇

系列综述:
💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于【CodeTopHot200】进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证,所有代码均优先参考最佳性能。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!
🌈【C++】秋招&实习面经汇总篇


文章目录

    • 基础知识
      • 二叉树广度优先遍历*
        • 递归算法
        • 非递归算法
    • 相关题目
        • 199. 二叉树的右视图
        • 104. 二叉树的最大深度
        • 111. 二叉树的最小深度
        • 求二叉树最左下的叶子
    • 参考博客


😊点此到文末惊喜↩︎

基础知识

二叉树广度优先遍历*

递归算法
  1. 非重点
    // 递归参数,如果需要修改要进行引用传递
    void traversal(TreeNode* cur, vector<vector<int>>& result, int depth) {// 递归出口if (cur == nullptr) return;// 递归体if (result.size() == depth) // 扩容result.push_back(vector<int>());// 原地构建数组result[depth].push_back(cur->val);// 顺序压入对应深度的数组中order(cur->left, result, depth + 1);order(cur->right, result, depth + 1);
    }
    vector<vector<int>> levelOrder(TreeNode* root) {// 初始化:一般为递归形参vector<vector<int>> result;int depth = 0;// 递归调用traversal(root, result, depth);// 返回结果return result;
    }
    
非递归算法
  1. 重点
    vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;	// 结果容器queue<TreeNode*> que;		// 队列if (root != nullptr) que.push(root);// 根非空入队while (!que.empty()) {vector<int> vec;		// 每层结果int size = que.size();	// 记录当前层结点数量for (int i = 0; i < size; ++i) {// 先记录后修改TreeNode *node = que.front();que.pop();// 按序压入每个结点的左右孩子if (node->left) que.push(node->left);if (node->right) que.push(node->right);// 每个结点的处理vec.push_back(node->val);}// 每层结点的处理res.emplace_back(vec);} return res;
    }
    

相关题目

199. 二叉树的右视图
  1. 题目
    • 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
      在这里插入图片描述
vector<int> rightSideView(TreeNode* root) {queue<TreeNode*> que;if (root != NULL) que.push(root);vector<int> result;while (!que.empty()) {int size = que.size();for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();// 将每一层的最后元素放入result数组中if (i == (size - 1)) result.push_back(node->val);if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return result;
}
104. 二叉树的最大深度
  1. 题目
    • 给定一个二叉树 root ,返回其最大深度。
    • 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
// 递归方式(后序遍历的应用模板)
int maxDepth(TreeNode* root) {auto self = [&](auto &&self, TreeNode *root)->int{if (root == nullptr) return 0;int max_left = self(self, root->left);int max_right = self(self, root->right);return max(max_left, max_right) + 1;};return self(self, root);
}// 非递归方式
int maxDepth(TreeNode *root) {int depth = 0;           // 结果queue<TreeNode*> que;    // 队列if (root != nullptr)que.push(root);while (!que.empty()) {// 层次遍历int size = que.size();for (int i = 0; i < size; ++i) {TreeNode *node = que.front();que.pop();if (node->left) que.push(node->left);if (node->right) que.push(node->right);}// 层数+1++depth;} return depth;
}
111. 二叉树的最小深度
  1. 核心思路
    • 层次遍历中,一直记录深度。直到返回第一个左右孩子均为空时的depth
  2. 递归法
    • 分别对二叉树的五种形态进行讨论
    int minDepth(TreeNode* root) {// 空二叉树if (root == NULL) return 0;// 只有左子树if (root->left != NULL && root->right == NULL) {return 1 + minDepth(root->left);}// 只有右子树if (root->left == NULL && root->right != NULL) {return 1 + minDepth(root->right);}// 左右子树都非空return 1 + min(minDepth(root->left), minDepth(root->right));
    }
    
  3. 非递归法
    • 层次遍历中:找到第一个左右孩子均为空的,即为最小深度
    int minDepth(TreeNode* root) {if (root == NULL) return 0;int depth = 0;queue<TreeNode*> que;que.push(root);while(!que.empty()) {int size = que.size();depth++; // 记录最小深度for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();if (!node->left && !node->right) { // 第一个左右孩子均空,为最小深度return depth;if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}}return depth;
    }
    
求二叉树最左下的叶子
  1. 题目
    • 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
  2. 思路
    • 使用层次遍历:每次记录第一个结点的值,最后就是最左下的结点
int findBottomLeftValue(TreeNode* root) {TreeNode *res = nullptr;queue<TreeNode*> que;if (root != nullptr) que.push(root);while (!que.empty()) {int size = que.size();for (int i = 0; i < size; ++i) {TreeNode *node = que.front();que.pop();if (i == 0) res = node; // 每次记录第一个结点if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return res->val;}

少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
不如点赞·收藏·关注一波

🚩点此跳转到首行↩︎

参考博客

  1. 「代码随想录」47. 全排列 II:【彻底理解排列中的去重问题】详解
  2. codetop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringSecurity工作原理

实现功能就是继承这几个对应功能的类。 大概工作流程 Spring Security 的过滤器&#xff08;Filters&#xff09;和拦截器&#xff08;Interceptors&#xff09;是 Spring Security 框架中用于保护 web 应用安全的重要组件。它们在处理 HTTP 请求时扮演不同的角色&#xff0c…

uni-app一些目录结构、方法、生命周期、打包、微信小程序登录与支付

1、关于uniapp的目录结构 跟普通vue项目目录结构差不多&#xff0c;多了几个核心文件&#xff0c;manifest.json是配置应用名称、appid、logo、版本等打包信息用的&#xff0c;pages.json的作用是配置页面路径、页面窗口样式、tabBar、navigationBar等页面类信息 2、页面适配方…

【Node.js】笔记梳理 8 - API和JWT

写在最前&#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识&#xff0c;需要格外注重实战和官方技术文档&#xff0c;文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

12月03日,每日信息差/菲律宾发生7.4级强震后共录得955次余震/腾讯惩处超 400 万个 QQ 号:这三大行为零容忍

_灵感 ​ &#x1f396; 中国联通&#xff1a;选举陈忠岳为公司董事长 &#x1f384; 菲律宾发生7.4级强震后共录得955次余震 &#x1f30d; 京沪高铁二线“收官段”尘埃落定&#xff1a;潍宿高铁初步设计正式获批 &#x1f30b; 我国燃料电池汽车产业进入提速关键期 &#…

树与二叉树堆:经典OJ题集(2)

目录 二叉树的性质及其问题&#xff1a; 二叉树的性质 问题&#xff1a; 一、对称的二叉树&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 二、另一棵树&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 三、翻转二叉树&#xff1a; 题目&#xff1a;…

synchronized和volatile的区别是什么?

synchronized和volatile是Java中的两个关键词&#xff0c;分别用于实现线程同步和线程间的可见性。 synchronized用于实现线程之间的互斥同步&#xff0c;即同一时刻只能有一个线程访问被synchronized修饰的代码块或方法&#xff0c;其他线程需要等待。synchronized确保了线程…

非功能关键知识总结(一)

文章目录 一、稳定性(一)、服务级别协议1、SLA2、OLA3、UC (二)、可用性指标(三)、突发事件等级 三、质量(一)、千行代码缺陷数量(二)、软件质量模型的发展(三)、产品质量模型 四、安全(一)、网络安全 五、灾备(一)、灾备指标(二)、灾难恢复等级(三)、容灾技术分类 一、稳定性 …

一次电气——电抗器(一)

我之前的工作是在国外建联合循环电厂&#xff0c;现在的工作是研发一次电力设备。虽然仍是在电力行业发展&#xff0c;但这两份不同岗位不同职能的工作究其感受而言有很大的不同。相较于第一份工作&#xff0c;第二份工作带给我带来的更多的是一种由广及微&#xff0c;由浅入深…

kafka3.6.0部署

部署zk https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1.tar.gz tar -xf apache-zookeeper-3.9.1.tar.gz -C /apps cd /apps/ && ln -s apache-zookeeper-3.9.1 zookeeper 修改配置bash grep -vE ^$|^# conf/zo…

buuctf [极客大挑战 2019]Havefun1

解题思路&#xff1a; 小习惯 本题先看看源码或者检查一下&#xff0c;可能这是俺的一个小习惯。 源码里面都看到了php的代码 php代码解析&#xff1a; $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } 1.$ca…

<蓝桥杯软件赛>零基础备赛20周--第8周第2讲--排序的应用

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

模板可变参数/包装器

一、什么是模板可变参数 1、对比函数可变参数 可变参数即参数的数量是不确定的&#xff0c;底层根据用户传入的数量&#xff0c;开一个数组存储对应的参数。 2、基本形式 args -- argument 参数 [0,n]个参数 // Args是一个模板参数包&#xff0c;args是一个函数形参参数包…

课题学习(十四)----三轴加速度计+三轴陀螺仪传感器-ICM20602

本篇博客对ICM20602芯片进行学习&#xff0c;目的是后续设计一个电路板&#xff0c;采集ICM20602的数据&#xff0c;通过这些数据对各种姿态解算的方法进行仿真学习。 一、 ICM20602介绍 1.1 初识芯片 3轴陀螺仪&#xff1a;可编程全刻度范围(FSR)为250 dps&#xff0c;500 d…

JavaWeb(四)

一、约束的概念和分类 约束是作用于表中列上的规则&#xff0c;用于限制加入表的数据&#xff0c;约束的存在保证了数据库中数据的正确性、有效性和完整性。 1.1、单表约束 利用约束创建表 需要注意的是: 1、主键是一行数据的唯一标识&#xff0c;要求非空且唯一。一张表只能…

Ubuntu20.04安装ROS2

官方参考文章 Ubuntu (Debian) — ROS 2 Documentation: Foxy documentation curl密钥问题 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg curl: (7) Failed to connect to raw.githubus…

DNA模糊匹配(动态规划)

我做动态规划还是少的 只会做那些显而易见的动态规划题&#xff08;这题是看了给出来的解题思路做的&#xff09; 以后可能就会做与这类似的了 代码如下&#xff1a; #include<stdio.h> #include<string.h> int get_min(int a, int b, int c); int min_l[301][…

R语言gWQS包在加权分位数和回归模型的应用

在流行病学研究中&#xff0c;相较于单一因素的暴露&#xff0c;多因素同时暴露的情况更为常见。传统模型在评价多因素联合暴露时存在数据维度高、多重共线性等问题. WQS 回归模型的基本原理是通过分位数间距及加权的方法&#xff0c;将多种研究因素的效应综合成为一个指数&…

LLM大语言模型(一):ChatGLM3-6B试用

前言 LLM大语言模型工程化&#xff0c;在本地搭建一套开源的LLM&#xff0c;方便后续的Agent等特性的研究。 本机环境 CPU&#xff1a;AMD Ryzen 5 3600X 6-Core Processor Mem&#xff1a;32GB GPU&#xff1a;RTX 4060Ti 16G ChatGLM3代码库下载 # 下载代码库 ​git c…

java后端自学错误总结

java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的参数化…

【中文编码】利用bert-base-chinese中的Tokenizer实现中文编码嵌入

最近接触文本处理&#xff0c;查询了一些资料&#xff0c;记录一下中文文本编码的处理方法吧。   先下载模型和词表&#xff1a;bert-base-chinese镜像下载   如下图示&#xff0c;下载好的以下文件均存放在 bert-base-chinese 文件夹下    1. 词编码嵌入简介 按我通俗的…