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

数据结构 之 树习题 力扣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. 二叉树的层序遍历icon-default.png?t=N7T8https://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. 二叉树的锯齿形层序遍历icon-default.png?t=N7T8https://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. 二叉树展开为链表icon-default.png?t=N7T8https://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&#xff0e;创建一个队列记为que,将根节点放入队列。 2.每次从队列中弹出一个节点&#xff0c;记为node。 3.第三步看这个node有没有左孩子&#xff0c;如果有左孩子把左孩子放入到队列中&#xff0c;如果node有右孩子&#xff0c;把右孩子放入到队列中。…...

闭包学习,闭包和高阶函数

面试官反复在前端面试中提出闭包相关的问题&#xff0c;并要求提供代码示例&#xff0c;主要是为了考察以下几点&#xff1a; 1.概念&#xff1a;考察候选人是否真正理解闭包是如何形成的&#xff0c;即当一个函数可以访问并操作其外部作用域中的变量&#xff0c;即使在其外部…...

Linux实战笔记(五) shell

大家好&#xff0c;我是半虹&#xff0c;这篇文章我们介绍一下 shell 1、Shell Shell 通常泛指系统提供给用户的操作界面&#xff0c;是系统内核与用户之间的连接 Shell 这个名字其实还挺形象的&#xff0c;中文翻译是壳&#xff0c;什么的壳呢&#xff0c;自然是系统内核的壳…...

TCP Wrappers 的使用

以ssh为例&#xff0c;每当有ssh的连接请求时&#xff0c;先读取系统管理员所设置的访问控制文件&#xff0c;符合要求&#xff0c;则会把这次连接原封不 动的转给ssh进程&#xff0c;由ssh完成后续工作&#xff1b;如果这次连接发起的ip不符合访问控制文件中的设置&#xff0c…...

数据结构——lesson11排序之快速排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

Nacos部署(二)Linux部署Nacos2.3.x集群环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;二&#xff09;Linux部署Nacos2.3.x集群环境 ⏱️…...

RuoYi 自定义字典列表页面编码翻译

“字典数据”单独维护&#xff0c;而不是使用系统自带的字典表&#xff0c;应该如何使用这样的字典信息呢&#xff1f; 系统字典的使用&#xff0c;请参考&#xff1a; 《RuoYi列表页面字典翻译的实现》 https://blog.csdn.net/lxyoucan/article/details/136877238 需求说明…...

GAMES101 学习4

材质和外观 材质 BRDF 漫反射 任何方向的光进来都会被均匀的反射到周围各个不同的方向上去 假设能量守恒&#xff0c;那么 Li Lo&#xff0c;这之后BRDF就 &#xff0c;就可以定义一个反照率 &#xff08;Albeo&#xff09; - &#xff0c;在&#xff08;0 - 1&#xff0…...

Redis中的缓存穿透

缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;导致这些请求直接到了数据库上&#xff0c;对数据库造成了巨大的压力&#xff0c;可能造成数据库宕机。 常见的解决方案&#xff1a; 1&#xff09;缓存无效 key 如果缓存和数据库中都查不到某…...

javaSwing超市收银(txt)

一、简介 超市收银系统是商店管理的重要组成部分&#xff0c;它可以帮助商家高效地进行商品管理、销售记录和结算。本文将介绍如何使用Java Swing开发一个简单的超市收银系统&#xff0c;包括基本功能如登录、修改商品信息、结算等&#xff0c;并利用txt文本作为数据库存储商品…...

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块&#xff08;Data Blocks&a…...

智慧商场数字化创新需要有数字能力帮手

商场和商圈是是促进流通创新、培育新兴消费的载体。很多实体店为适应消费升级需求新变化&#xff0c;加快运用现代信息技术&#xff0c;建设智慧商店&#xff0c;创新消费场景。蚓链运用现代信息技术&#xff08;互联网、物联网、5G、大数据、人工智能、云计算等&#xff09;&a…...

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的&#xff0c;有个客户解密了一个js&#xff0c;然后又看不懂里边的一些逻辑&#xff0c;想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的&#xff0c;以及如何下载应用的。继而诞生了这篇文章&#xff0c;讲解一下他的基本原理。 渐进式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 你好&#xff0c;这里是codetrend专栏“高并发编程基础”。 引言 在并发执行任务时&#xff0c;由于资源共享的存在&#xff0c;线程安全成为一个需要考虑的问题。与串行化程序相比&#xff0c;并发执行可以更好地利用CPU计算能力&#xff0c;提高系统的吞吐量…...

八道Python入门级题目及答案详解

前言 介绍Python作为一门流行的编程语言&#xff0c;易学易用的特点。强调通过练习题目来加深对Python语法和编程概念的理解。 题目一&#xff1a;计算两个数的和 描述&#xff1a;编写一个Python程序&#xff0c;计算两个数的和&#xff0c;并输出结果。举例&#xff1a;输…...

Git 的cherry-pick含义

目录 1. cherry-pick的基本概念 2. cherry-pick的使用场景 3. cherry-pick的使用方法 结论 1. cherry-pick的基本概念 git cherry-pick是一个Git命令&#xff0c;它允许你选择一个或多个其他分支上的提交&#xff08;commits&#xff09;&#xff0c;并将它们复制到你当前的…...

大数据中TopK问题

1.给定100个int数字&#xff0c;在其中找出最大的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+部署+讲解)

前言 博主简介&#x1f468;&#x1f3fc;‍⚕️&#xff1a;国内某一线互联网公司全栈工程师&#x1f468;&#x1f3fc;‍&#x1f4bb;&#xff0c;业余自媒体创作者&#x1f4bb;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f4d5;&#x…...

C++经典面试题目(四)

1、请解释const关键字的作用。 在C中&#xff0c;const关键字主要用来表示“不变性”&#xff0c;即被它修饰的东西是不可修改的。它可以用于多种上下文&#xff1a; 修饰基本数据类型变量&#xff1a;声明一个常量&#xff0c;一旦初始化后&#xff0c;其值就不能再更改。 co…...

2024/3/24 蓝桥杯

P1678 烦恼的高考志愿 二分 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int[] a new int[n1];//学校int[] b new int[m…...

用户验证:Streamlit应用程序与Streamlit-Authenticator

写在前面 在数字化时代&#xff0c;数据安全和用户隐私越来越受到重视。对于使用Streamlit构建的Web应用程序来说&#xff0c;确保用户的安全身份验证是至关重要的。而Streamlit-Authenticator&#xff0c;作为一个专门为Streamlit应用程序设计的身份验证库&#xff0c;正成为保…...

风丘EV能量流测试解决方案 提高电动汽车续航能力

电动汽车&#xff08;EV&#xff09;近些年发展迅猛&#xff0c;已被汽车业内普遍认为是未来汽车发展的新方向&#xff0c;但现如今电动汽车仍然存在一些短板&#xff0c;导致其还无法替代传统燃油车。对此&#xff0c;首先想到的肯定就是电动车的续航问题。其实解决电动车续航…...

【Python】输出一个 Python 项目下需要哪些第三方包

方法一 pycharm 方法二 要分析一个 Python 项目下需要哪些第三方包并生成 requirements.txt 文件&#xff0c;你可以使用 pipreqs 工具。以下是具体的步骤&#xff1a; 首先&#xff0c;确保你已经安装了 pipreqs 工具。如果未安装&#xff0c;可以使用以下命令进行安装&a…...

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…...

每天30分钟python(第一天)

1.input 1.规则 input输入的是字符串 2.print打印规则&#xff1a; 整数不能与文字一起打印&#xff0c;但是字符串可以&#xff0c;所以将文字转换为字符串即可 print("小明今年"str(5)"岁了") 代码实践&#xff1a; 错误代码&#xff1a; # 实现 …...

gitlab简单介绍及安装使用

gitlab 概述 什么是 gitlab GitLab 是一个基于 Web 的 Git 仓库管理工具&#xff0c;提供了代码托管、版本控制、协作开发、持续集成和部署等功能。它类似于 GitHub&#xff0c;但是 GitLab 可以在私有服务器上部署&#xff0c;也可以使用 GitLab 提供的托管服务。GitLab 支持…...

NetCore itext7 创建、编辑PDF插入表格、图片、文字(三)

NetCore 创建、编辑PDF插入表格、图片、文字 NetCore 创建、编辑PDF插入表格、图片、文字(二) NetCore 创建、编辑PDF插入表格、图片、文字(三) 直接上代码 nuget引入 itext7 using System; using System.IO;using iText.IO.Image; using iText.Kernel.Colors; // 导入颜色…...

数据结构奇妙旅程之深入解析冒泡排序

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成…...

解决 sudo apt update E: The repository is not signed.

一段时间没有用ubuntu系统&#xff0c;出现了很多这样的报错 解决方法 cd /etc/apt/sources.list.d ls然后把报错的项目从里面移除&#xff0c;例如 sudo rm cudnn-local-ubuntu2004-8.7.0.84.list全部移除后&#xff0c;再sudo apt-get update就能成功...