数据结构 之 树习题 力扣oj(附加思路版)
层序遍历
算法流程:
1.创建一个队列记为que,将根节点放入队列。
2.每次从队列中弹出一个节点,记为node。
3.第三步看这个node有没有左孩子,如果有左孩子把左孩子放入到队列中,如果node有右孩子,把右孩子放入到队列中。
4.重复步骤二和步骤三,直到队列为空。
相关函数和知识:
#include"Tree.h"
int main()
{vector<int>vec;//二维数组就是一维数组中的元素是一维数组vector<vector<int>>vec1;vec1.push_back(vec);//排序函数sort(vec.begin(), vec.end());//从小到大排序sort(vec.rbegin(), vec.rend());//从大到小排序reverse(vec.begin(), vec.end());//反转数组
}
二叉树的层序遍历
102. 二叉树的层序遍历
https://leetcode.cn/problems/binary-tree-level-order-traversal/
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路
通过维护一个队列实现了对二叉树的层序遍历。首先,根节点入队。然后,当队列不为空时,循环执行:遍历当前队列中的所有节点,将它们的值收集到一个二维向量中,并将它们的非空左右子节点依次入队。每完成一层的遍历,就将这一层的向量添加到结果向量中,直到遍历完所有层。
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {if(root==nullptr) return {};queue<TreeNode*>que;que.push(root);vector<vector<int>>res;while(!que.empty()){vector<int>vec;int n=que.size();for(int i=0;i<n;i++){ TreeNode*front=que.front();que.pop();vec.push_back(front->val);if(front->left)que.push(front->left);if(front->right)que.push(front->right);}res.push_back(vec);}return res;}
};
二叉树的锯齿形层序遍历
103. 二叉树的锯齿形层序遍历
https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
思路
这段代码实现了二叉树的锯齿形层序遍历。它使用了队列来进行层序遍历,同时通过一个布尔变量
flag来标记是否需要反转当前层的节点值顺序。每次遍历一层时,先将该层的节点值存入一个临时的 vector 中,然后根据flag变量的值决定是否需要反转该 vector,最后将其加入结果 vector 中。这样可以实现从左向右和从右向左交替进行层序遍历。
class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {if(root==nullptr) return {};vector<vector<int>>res;queue<TreeNode*>que;que.push(root);bool flag=false;while(!que.empty()){vector<int>vec;//写在循环里会每次都清空int n=que.size();for(int i=0;i<n;i++){TreeNode*front=que.front();que.pop();vec.push_back(front->val);if(front->left) que.push(front->left);if(front->right) que.push(front->right);}if (flag) reverse(vec.begin(), vec.end());flag=!flag;res.push_back(vec);}return res;}
};
先序遍历
Preorder算法流程:
1.先申请一个栈,记为stk。
2.然后将根节点压入stk 中。
3.每次从stk 中弹出栈顶节点,记为cur,然后打印cur的值。如果cur的右子节点不为空,将cur的右子树压入stk 中。如果cur的左子树不为空,将cur的左子节点压入stk 中。不断重复次步骤3直到stk为空循环结束。
二叉树展开为链表
114. 二叉树展开为链表
https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/
提示
给你二叉树的根结点 root ,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
思路
通过先序遍历二叉树的方式,将每个节点按顺序连接到单链表中。利用栈来模拟递归的过程,先将根节点入栈,然后不断弹出栈顶节点,将其右子节点和左子节点依次入栈,同时将当前节点连接到链表中。
class Solution {
public:void flatten(TreeNode* root) {if(root==nullptr) return ;stack<TreeNode*>stk;stk.push(root);TreeNode *H=new TreeNode(),*T=H;//因为头节点不知道拼在哪 故创建一个虚头节点while (!stk.empty()){TreeNode* top = stk.top();stk.pop();T->right=top;T->left=nullptr;T=T->right;if (top->right) stk.push(top->right);//因为栈是后进先出 所以右子树先进if (top->left) stk.push(top->left);}delete H;}
};
相关文章:
数据结构 之 树习题 力扣oj(附加思路版)
层序遍历 算法流程: 1.创建一个队列记为que,将根节点放入队列。 2.每次从队列中弹出一个节点,记为node。 3.第三步看这个node有没有左孩子,如果有左孩子把左孩子放入到队列中,如果node有右孩子,把右孩子放入到队列中。…...
闭包学习,闭包和高阶函数
面试官反复在前端面试中提出闭包相关的问题,并要求提供代码示例,主要是为了考察以下几点: 1.概念:考察候选人是否真正理解闭包是如何形成的,即当一个函数可以访问并操作其外部作用域中的变量,即使在其外部…...
Linux实战笔记(五) shell
大家好,我是半虹,这篇文章我们介绍一下 shell 1、Shell Shell 通常泛指系统提供给用户的操作界面,是系统内核与用户之间的连接 Shell 这个名字其实还挺形象的,中文翻译是壳,什么的壳呢,自然是系统内核的壳…...
TCP Wrappers 的使用
以ssh为例,每当有ssh的连接请求时,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不 动的转给ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,…...
数据结构——lesson11排序之快速排序
💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…...
Nacos部署(二)Linux部署Nacos2.3.x集群环境
😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: Nacos部署(二)Linux部署Nacos2.3.x集群环境 ⏱️…...
RuoYi 自定义字典列表页面编码翻译
“字典数据”单独维护,而不是使用系统自带的字典表,应该如何使用这样的字典信息呢? 系统字典的使用,请参考: 《RuoYi列表页面字典翻译的实现》 https://blog.csdn.net/lxyoucan/article/details/136877238 需求说明…...
GAMES101 学习4
材质和外观 材质 BRDF 漫反射 任何方向的光进来都会被均匀的反射到周围各个不同的方向上去 假设能量守恒,那么 Li Lo,这之后BRDF就 ,就可以定义一个反照率 (Albeo) - ,在(0 - 1࿰…...
Redis中的缓存穿透
缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,导致这些请求直接到了数据库上,对数据库造成了巨大的压力,可能造成数据库宕机。 常见的解决方案: 1)缓存无效 key 如果缓存和数据库中都查不到某…...
javaSwing超市收银(txt)
一、简介 超市收银系统是商店管理的重要组成部分,它可以帮助商家高效地进行商品管理、销售记录和结算。本文将介绍如何使用Java Swing开发一个简单的超市收银系统,包括基本功能如登录、修改商品信息、结算等,并利用txt文本作为数据库存储商品…...
Linux 理解文件系统、磁盘结构、软硬链接
目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块(Data Blocks&a…...
智慧商场数字化创新需要有数字能力帮手
商场和商圈是是促进流通创新、培育新兴消费的载体。很多实体店为适应消费升级需求新变化,加快运用现代信息技术,建设智慧商店,创新消费场景。蚓链运用现代信息技术(互联网、物联网、5G、大数据、人工智能、云计算等)&a…...
JS加密解密之应用如何保存到桌面书签
前言 事情起因是这样的,有个客户解密了一个js,然后又看不懂里边的一些逻辑,想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的,以及如何下载应用的。继而诞生了这篇文章,讲解一下他的基本原理。 渐进式Web应用…...
线上linux服务器升级nginx
一个nginx版本空包 一个pcre文件 一个zlib文件 ./configure配置文件 make编译 make install复制所有文件到nginx 如果nginx -v无版本号 检查环境变量cat /etc/profile 编辑 环境变量vi /etc/profile 按i进入编辑模式 按esc进入查看模式 因为path中并未使用%JAVA_HOME%字样…...
使用JDK提供的常用工具在多线程编写线程安全和数据同步的程序
题图来自APOD 你好,这里是codetrend专栏“高并发编程基础”。 引言 在并发执行任务时,由于资源共享的存在,线程安全成为一个需要考虑的问题。与串行化程序相比,并发执行可以更好地利用CPU计算能力,提高系统的吞吐量…...
八道Python入门级题目及答案详解
前言 介绍Python作为一门流行的编程语言,易学易用的特点。强调通过练习题目来加深对Python语法和编程概念的理解。 题目一:计算两个数的和 描述:编写一个Python程序,计算两个数的和,并输出结果。举例:输…...
Git 的cherry-pick含义
目录 1. cherry-pick的基本概念 2. cherry-pick的使用场景 3. cherry-pick的使用方法 结论 1. cherry-pick的基本概念 git cherry-pick是一个Git命令,它允许你选择一个或多个其他分支上的提交(commits),并将它们复制到你当前的…...
大数据中TopK问题
1.给定100个int数字,在其中找出最大的10个; import java.util.PriorityQueue;public class Main {public static void main(String[] args) {final int topK 3;int[] vec {4, 1, 5, 8, 7, 2, 3, 0, 6, 9};PriorityQueue<Integer> pq new PriorityQueue<…...
基于SpringBoot+MyBatis+Vue的电商智慧仓储管理系统的设计与实现(源码+LW+部署+讲解)
前言 博主简介👨🏼⚕️:国内某一线互联网公司全栈工程师👨🏼💻,业余自媒体创作者💻,CSDN博客专家🏆,Java领域优质创作者📕&#x…...
C++经典面试题目(四)
1、请解释const关键字的作用。 在C中,const关键字主要用来表示“不变性”,即被它修饰的东西是不可修改的。它可以用于多种上下文: 修饰基本数据类型变量:声明一个常量,一旦初始化后,其值就不能再更改。 co…...
告别远程服务器:在Ubuntu 22.04上为ARM64嵌入式开发搭建本地sysroot环境(保姆级教程)
告别远程服务器:在Ubuntu 22.04上为ARM64嵌入式开发搭建本地sysroot环境(保姆级教程) 嵌入式开发者常面临一个尴尬困境:每次修改代码后,都需要将代码上传到远程ARM服务器或开发板进行编译测试,不仅耗时耗力…...
08_Claude Code之高级工作流与自动化:循环、调度与并行批处理
08 Claude Code之高级工作流与自动化:循环、调度与并行批处理 Claude Code 的真正价值在于自动化能力,而不仅仅是对话工具。本文深度讲解 Plan Mode 的量化对比(多文件重构成功率从62%到89%)、非交互批处理脚本、并行处理架构、CI…...
WHUCS—OS—lab实验:从零实现一个用户态定时器
1. 用户态定时器实现原理 在操作系统中,定时器是一个非常重要的基础功能。想象一下你每天早上依赖的闹钟 - 它会在特定时间准时响起,提醒你该起床了。用户态定时器的工作原理与此类似,只不过它是在程序运行时提供定时提醒功能。 xv6作为一个…...
如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南
如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/Thre…...
利用快马AI一键生成vmware虚拟机下载与配置脚本,快速搭建开发原型环境
今天想和大家分享一个快速搭建开发环境的实用技巧——利用AI工具自动生成VMware虚拟机下载与配置脚本。作为一个经常需要测试不同开发环境的程序员,我发现手动配置虚拟机实在太费时间了,直到尝试了InsCode(快马)平台的AI生成功能,整个过程变得…...
零克云联合创始人占冰强:如何借助OpenClaw为企业AI变革提速!
3月28日,由MoltBank&聚鲸科技、AIGCLink联合主办的“赢在OpenClaw北京站”闭门分享会,在北京成功举行。本次活动聚焦AI Agent落地、AI商业场景落地、AI法律合规边界等关键议题。在演讲环节,零克云联合创始人兼COO占冰强分享了:…...
抗DDoS设备性能测试方法详解:专业仪表如何精准评估防护能力
摘要抗DDoS设备的防护效果如何,单靠厂商自测数据不可信,需要专业网络安全测试仪表进行第三方验证。本文系统梳理SYN Flood、UDP Flood、HTTP Flood、反射放大、慢速攻击等主流DDoS攻击的测试方法,结合运营商级集采测试标准,详解清…...
M2LOrder模型Python爬虫实战:应对动态渲染与数据加密网站
M2LOrder模型Python爬虫实战:应对动态渲染与数据加密网站 最近有个朋友找我帮忙,说他们公司需要从某个网站上抓取一些商品数据,但试了好几个爬虫工具都搞不定。我一看,好家伙,这网站不仅数据是页面加载完才动态生成的…...
一、BLE入门:从广播信道到报文解析,构建无线连接基石
1. BLE技术入门:无线世界的敲门砖 第一次接触BLE技术时,我完全被那些专业术语搞懵了。什么广播信道、报文解析,听起来就像天书一样。但当我真正动手调试一个智能手环项目后,才发现BLE其实就像两个人在嘈杂的教室里传纸条——需要…...
AI论文生成平台推荐:7款高效工具(含爱毕业aibiye)支持论文格式自动排版与LaTeX模板智能匹配
工具快速对比排名(前7推荐) 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…...
