笔试面试题——二叉树进阶(一)

文章目录
- 一、根据二叉树创建字符串
- 1、题目讲解
- 2、思路讲解
- 3、代码实现
- 二、二叉树的分层遍历
- 1、题目讲解
- 2、思路讲解
- 3、代码实现
- 三、二叉树的最近公共祖先
- 1、题目讲解
- 2、思路讲解+递归展开图
- 3、代码实现
一、根据二叉树创建字符串
1、题目讲解


2、思路讲解


3、代码实现
class Solution {
public:string tree2str(TreeNode* root) {string s;if(root==nullptr)return s;s+=to_string(root->val);if(root->left || (root->left==nullptr && root->right)){s+='(';s+=tree2str(root->left);s+=')';}if(root->right){s+='(';s+=tree2str(root->right);s+=')';}return s;}
};
二、二叉树的分层遍历
1、题目讲解

2、思路讲解

3、代码实现
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> s;vector<vector<int>> vv;int levelsize;if(root){s.push(root);levelsize=1;}while(!s.empty()){vector<int> v;while(levelsize--){TreeNode* front=s.front();s.pop();v.push_back(front->val);if(front->left)s.push(front->left);if(front->right)s.push(front->right); }vv.push_back(v);levelsize=s.size();}return vv;}
};
三、二叉树的最近公共祖先
1、题目讲解


2、思路讲解+递归展开图
思路一:

思路二:



3、代码实现
代码一:
class Solution {
public:bool find(TreeNode* root,TreeNode* x){if(root==nullptr)return false;if(root==x)return true;return (find(root->left,x)||find(root->right,x));}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root==p || root==q)return root;bool pleft=find(root->left,p);bool pright=!pleft;bool qleft=find(root->left,q);bool qright=!qleft;if((pleft && qright) || (pright && qleft)){return root;}if(pleft && qleft){return lowestCommonAncestor(root->left,p,q);}if(pright && qright){return lowestCommonAncestor(root->right,p,q);}return nullptr;}
};
代码二:
class Solution {
public:bool findpath(TreeNode* root,TreeNode* x,stack<TreeNode*>& st){if(root==nullptr)return false;st.push(root);if(root==x)return true;if(findpath(root->left,x,st))return true;if(findpath(root->right,x,st))return true;st.pop();return false; }TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> ppath,qpath;findpath(root,p,ppath);findpath(root,q,qpath);while(ppath.size()!=qpath.size()){if(ppath.size()>qpath.size())ppath.pop();elseqpath.pop();}while(ppath.top()!=qpath.top()){ppath.pop();qpath.pop();}return qpath.top(); }
};
相关文章:
笔试面试题——二叉树进阶(一)
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、根据二叉树创建字符串1、题目讲解2、思路讲解3、代码实现 二、二叉树的分层遍历1、题目讲…...
Java反射示例
Java反射示例 创建数据类型ReflectPoint.java package com.reflection;import java.util.Date;public class ReflectPoint {private Date birthday new Date();private int x;public int y;public String str1 "ball";public String str2 "basketball"…...
【WinForm.NET开发】实现使用后台操作的窗体
本文内容 创建使用后台操作的窗体使用设计器创建 BackgroundWorker添加异步事件处理程序添加进度报告和取消支持Checkpoint 如果某项操作需要很长的时间才能完成,并且不希望用户界面 (UI) 停止响应或阻塞,则可以使用 BackgroundWorker 类在另一个线程上…...
【操作系统和计网从入门到深入】(四)基础IO和文件系统
前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记,所以如果是博主比较熟悉的知识点,博主可能就直接跳过了,但是所有重要的知识点,在这个专栏里面都会提到!而且我也一定会保证这个专栏知识点的完整性&…...
四.Winform使用Webview2加载本地HTML页面并互相通信
Winform使用Webview2加载本地HTML页面并互相通信 往期目录本节目标核心代码实现HTML代码实现的窗体Demo2代码效果图 往期目录 往期相关文章目录 专栏目录 本节目标 实现刷新按钮点击 C# winform按钮可以调用C# winform代码显示到html上点击HTML按钮可以调用C# winform代码更…...
如何有效清理您的Python环境:清除Pip缓存
Python是一个广泛使用的高级编程语言,以其强大的库和框架而闻名。然而,随着时间的推移和不断安装新的包,Python环境可能会变得混乱不堪,尤其是pip缓存可能占用大量的磁盘空间。本文将向您展示如何有效地清理pip缓存,保…...
Jira 母公司全面停服 Server 产品,用户如何迁移至极狐GitLab
Jira 母公司即将全面停服旗下部分 Server 端产品的销售和服务支持! Jira 母公司 Atlassian 在几年前确定了公司的战略为“全面上云”,为此做出了停止 Server 产品的销售和支持。整个时间线从 2021 年 2 月 2 日开始,直到今年 2 月 15 日&…...
Docker安装配置OnlyOffice
OnlyOffice 是一款强大的办公套件,你可以通过 Docker 轻松安装和部署它。本文将指导你完成安装过程。 步骤 1:拉取 OnlyOffice Docker 镜像 首先,使用以下命令从 Docker Hub 拉取 OnlyOffice Document Server 镜像: sudo docke…...
启动低轨道卫星LEO通讯产业与6G 3GPP NTN标准
通讯技术10年一个大跃进,从1990年的2G至2000年的3G网路,2010年的4G到近期2020年蓬勃发展的5G,当通讯技术迈入融合网路,当前的 5G 技术不仅可提供高频宽、低延迟,同时可针对企业与特殊需求以 5G 专网的模式提供各式服务…...
PICO Developer Center 创建和调试 ADB 命令
PICO 开发者中心概览 ADB 是一个轻量级的 Android 调试桥(Android Debug Bridge,简称 ADB),用于与 Android 设备进行通信和调试。ADB提供了许多有用的功能,使开发人员能够轻松地管理和调试设备上的应用程序。 你可以使用 PDC 工具来调试系统…...
【VRTK】【PICO】如何快速创建一个用VRTK开发的PICO项目
【背景】 每次新建一个VRTK的PICO项目总是做一些重复工作,于是就想着搞成一个基本的包,把基本的设置都放进去,今后新做项目直接导这个包就行了。 完整资源包请见本篇博客的绑定资源。 【内容简介】 这个包是我为了快速开发基于VRTK的PICO应用设置的基础项目包。每次开发…...
国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络
国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络 openKylin 操作系统目前适配支持X86、ARM、RISC-V三个架构的个人电脑、平板电脑及教育开发板,可以满足绝大多数个人用户及开发者的使用需求。适用于在VirtualBox平台上安装openKylin-1.0.1…...
本地git切换地区后,无法使用ssh访问github 22端口解决方案
问题 由于放假回家,发现之前一直使用正常的git,与github无法通讯,pull和push都无法连接。报错如下: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 原因 可能是所…...
Chat2DB:AI赋能的多数据库客户端工具,开源领航未来数据库管理
Chat2DB:开源多数据库客户端的AI革新 Chat2DB使用教程:Chat2DB使用教程_哔哩哔哩_bilibili 引言: 随着企业数据的快速膨胀,数据库管理的复杂性也在增加。此时,一个能够跨越数据库边界、并且集成先进的AI功能的工具,不…...
SQL Server修改数据字段名的方法
1. ALTER TABLE语句修改 这是一种最常用的数据库更改字段的方法,使用Alter Table语句来更改数据库字段的名称。 一般格式如下: ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 新字段名; 例如,修改字段名字段名从UserName到Uname:…...
Flutter编译报错Connection timed out: connect
背景:用Android Studo 创建了Flutter项目,编译运行报错java.net.ConnectException: Connection timed out: connect 我自己的环境: windows11 Android Studio Flutter 截图如下: 将错误日志展开之后: Exception…...
PG DBA培训26:PostgreSQL运维诊断与监控分析
本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL Diagnosis and monitoring analysis,学完本课程可以掌握PostgreSQL日常运维检查-风哥PGSQL工具箱,风哥专用PGSQL工具箱介绍,风哥专用PGSQL工具箱使用&…...
运维之道—生产环境安装Redis
目录 1.前言 2.环境准备 2.1 安装gcc依赖 3.部署安装 3.1 下载redis安装包 3.2 解压并编译安装redis 3.3 配置redis 编辑3.4 启动redis并测试 4. 总结 1.前言 大家好,运维之道的系列文章继续进行,我们今天整理的是Redis生产环境的安装,Redis的安装以及生产环境的…...
人工智能数学验证工具LEAN4【入门介绍3】乘法世界-证明乘法的所有运算律
视频链接,创作不易记得投币哦: import Game.Levels.Multiplication.L08add_mul World "Multiplication" Level 9 Title "mul_assoc" namespace MyNat Introduction " We now have enough to prove that multiplication is a…...
Armv8-M的TrustZone技术简介
TrustZone技术是适用于Armv8-M的可选安全扩展,旨在为各种嵌入式应用提供改进的系统安全基础。 TrustZone技术的概念并不新鲜。该技术已经在Arm Cortex-A系列处理器上使用了几年,现在已经扩展到Armv8-M处理器。 在high level上,TrustZone技术适用于Armv8-M的概念与Arm Cort…...
从原理到实践:深入解析调频连续波雷达的核心技术与应用
1. 调频连续波雷达的基本原理 我第一次接触调频连续波(FMCW)雷达是在2015年做智能停车项目时。当时为了检测车位占用情况,试过超声波、红外等多种传感器,最后发现毫米波雷达才是最佳选择。FMCW雷达与传统脉冲雷达最大的区别在于它持续发射频率变化的电磁…...
Next.js Monorepo包管理:使用Yarn Workspace的10个最佳实践指南
Next.js Monorepo包管理:使用Yarn Workspace的10个最佳实践指南 【免费下载链接】nextjs-monorepo-example Collection of monorepo tips & tricks 项目地址: https://gitcode.com/gh_mirrors/ne/nextjs-monorepo-example 在现代前端开发中,…...
影像技术实战11:视频封面生成黑屏、模糊、重复?FFmpeg + OpenCV 构建高质量缩略图自动优选方案
影像技术实战11:视频封面生成黑屏、模糊、重复?FFmpeg OpenCV 构建高质量缩略图自动优选方案 一、问题场景:封面不是“随便截一帧” 在视频平台、素材管理系统、内容审核后台、AI 剪辑工具里,视频上传后自动生成封面是一个很常见…...
5分钟终极指南:用m4s-converter永久保存你的B站缓存视频
5分钟终极指南:用m4s-converter永久保存你的B站缓存视频 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的烦恼…...
【RuoYi】数据分页功能分析 —— 以登录日志页面为例
本文基于 RuoYi-Vue v3.8.2,以"监控 → 登录日志"页面为例,从前端代码、前端开发者工具、后端代码到后端 Log 输出,完整分析 RuoYi 框架中数据分页的实现原理。一、实例简介本次分析选取的含数据分页功能的页面为:系统管…...
化工行业节能改造数据监测系统方案
针对工厂存在能源利用不足、设备利用率偏低、人工抄表粗放等痛点,某化工企业通过落实多项节能数字化改造措施,实现变废为宝、节能增效等多种能源效益。主要举措包括:通过回收高温蒸汽驱动闲置汽轮机实现发电、通过回收富余蒸汽为生产提供热源…...
保姆级教程:解决PyTorchViz安装报错,手把手教你用AlexNet模型可视化
PyTorch模型可视化实战:从安装报错到AlexNet结构解析全指南 在深度学习模型开发过程中,可视化工具如同开发者的"第二双眼睛"。PyTorchViz作为PyTorch生态中轻量级但功能强大的可视化工具,能直观展示模型的计算图结构,帮…...
破解人类微生物组数据分析难题:curatedMetagenomicData的完整解决方案
破解人类微生物组数据分析难题:curatedMetagenomicData的完整解决方案 【免费下载链接】curatedMetagenomicData Curated Metagenomic Data of the Human Microbiome 项目地址: https://gitcode.com/gh_mirrors/cu/curatedMetagenomicData 宏基因组数据分析在…...
DeepSeek LeetCode 2503.矩阵查询可获得的最大分数 Go实现
以下是 LeetCode 2503 的 Go 实现,使用优先队列 排序 离线查询的思路:go import ("container/heap""sort" )type Cell struct {val intr intc int }// 最小堆实现 type MinHeap []Cellfunc (h MinHeap) Len() int {…...
告别卡顿与花屏:i.MX6ULL驱动OV2640摄像头的分辨率设置与V4L2应用层避坑指南
i.MX6ULL驱动OV2640摄像头的分辨率优化与V4L2实战指南 当你在i.MX6ULL平台上成功驱动了OV2640摄像头后,真正的挑战才刚刚开始。许多开发者会遇到这样的困扰:明明硬件连接正确,驱动也加载了,但图像输出却出现各种异常——画面只有一…...
