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

二叉树--算法题总结

1、利用层序遍历的产生的字符串来创建二叉树

 /*** 使用层序遍历的字符串创建二叉树* @param treeInfo* @return*/public static TreeNode generateTreeNodeSecond(String treeInfo) {LinkedList<TreeNode> treeNodeLinkedList = new LinkedList<>();if(StringUtils.isEmpty(treeInfo)) {return null;}String[] stringList = treeInfo.split(",");int i =0;TreeNode root = new TreeNode(Integer.valueOf(stringList[i]));treeNodeLinkedList.offer(root);i++;while(!treeNodeLinkedList.isEmpty()) {TreeNode currentNode = treeNodeLinkedList.poll();String  temp = stringList[i];if(temp.compareTo("null")!=0) {currentNode.left = new TreeNode(Integer.valueOf(temp));treeNodeLinkedList.offer(currentNode.left);}i++;temp = stringList[i];if(temp.compareTo("null")!=0) {currentNode.right = new TreeNode(Integer.valueOf(temp));treeNodeLinkedList.offer(currentNode.right);}i++;if(i>= stringList.length) {break;}}return root;}

2、层序遍历二叉树

public static List<List<Integer>> levelShow(TreeNode root) {List<List<Integer>> listList = new ArrayList<>();LinkedList<TreeNode> treeNodeLinkedList = new LinkedList<>();treeNodeLinkedList.offer(root);while(!treeNodeLinkedList.isEmpty()) {int size = treeNodeLinkedList.size();List<Integer> rowInfo = new ArrayList<>();for(int i =0;i< size;i++) {TreeNode treeNode = treeNodeLinkedList.poll();// 读取数据rowInfo.add(treeNode.value);if(treeNode.left !=null) {treeNodeLinkedList.offer(treeNode.left);}if(treeNode.right !=null) {treeNodeLinkedList.offer(treeNode.right);}}listList.add(rowInfo);}return listList;}

3、获取树中节点的个数

    /*** 获取树中节点的个数* @param root* @return*/public int size(TreeNode root) {if(root == null) {return 0;}//递归遍历左子树int a = size(root.left);int b= size(root.right);return a + b+ 1;}

4、获取叶子节点的个数

   /*** 获取叶子节点的个数* @param root* @return*/public int getLeaf(TreeNode root) {if(root == null)  {return 0;}if(root.left == null &&root.right == null) {// 判断叶子左右节点是否为空,若为空则为叶子节点return 1;}int getLeafLeft = getLeaf(root.left);int getLeafRight = getLeaf(root.right);return getLeafLeft + getLeafRight;}

5、获取第k层的节点个数

/*** 获取第k层的节点个数* @param root* @param k* @return*/public static int getKLevelNode(TreeNode root,int k) {if(root == null) {return 0;}if(k == 1) {return 1;}int getKLevelNodeLeft =  getKLevelNode(root.left , k-1);int getKLevelNodeRight = getKLevelNode(root.right , k -1);return getKLevelNodeLeft +getKLevelNodeRight;}

6、查询对应值的节点

    public static TreeNode find(TreeNode root, int val) {if(root == null) {return null;}if(root.value == val) {return root;}// 左子树查找val 使用对应的值TreeNode leftTree = find(root.left, val);// 接收值不为 null ,说明左子树已经查找到valif(leftTree != null) {return leftTree;}// 右子树查找val, 使用 rightTree 来接收TreeNode rightTree = find(root.right ,val);if(rightTree !=null) {return rightTree;}// 走到这一步说明左右子树都没有找到val,直接返回nullreturn null;}

7、是否是完全二叉树

public static boolean isCompleteTree(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();queue.offer(root);boolean isStep1 = true;while(!queue.isEmpty()) {TreeNode node = queue.poll();if(isStep1) {if(node.left !=null && node.right != null) {queue.offer(node.left);queue.offer(node.right);} else if(node.left  !=null){queue.offer(node.left);isStep1 = false;} else if(node.right !=null) {return false;}  else {isStep1 = false;}} else {// 到达第二轮的时候,如果两者存在一个为空的就说明不是完全二叉树if(node.left!=null || node.right !=null) {return false;}}}return true;}

8、两棵树是否完全相同

    /*** 检查两颗树是否相同* @param p* @param q* @return*/public static boolean isSameTree(TreeNode p, TreeNode q) {if( p== null&&  q== null) {return true;}if ( p == null || q == null) {return false;}if(p.value == q.value) {return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);}return false;}

9、一颗树是否是另一个树的子树

    /*** 判断是否是子树* @param root* @param subRoot* @return*/public static boolean isSubTree(TreeNode root ,TreeNode subRoot) {if(subRoot == null) {return true;}if(root == null) {return false;}// 递归判断return isSameTree(root,subRoot) || isSubTree(root.left,subRoot) ||isSubTree(root.right,subRoot);}

10、打印从根节点到子节点的路径

 /*** 打印对应根节点到子节点的路径* @param root*/public  static void showTrace(TreeNode root) {List<String> result = new ArrayList<>();// 声明一个队列LinkedList<TreeNode> queue = new LinkedList<>();// 记录路径信息LinkedList<String> stringLinkedList = new LinkedList<>();queue.offer(root);stringLinkedList.offer(root.value + "");while(queue !=null) {TreeNode tempNode =queue.poll();String currentPath = stringLinkedList.poll();// 说明不是子节点if(tempNode.left == null && tempNode.right == null) {result.add(currentPath);}if(tempNode.left  != null) {queue.offer(tempNode.left);stringLinkedList.offer(currentPath + "->" + tempNode.left.value);}if(tempNode.right !=null) {queue.offer(tempNode.right);stringLinkedList.offer(currentPath + "->" + tempNode.right.value);}}for(String item: result) {System.out.println(item);}}

相关文章:

二叉树--算法题总结

1、利用层序遍历的产生的字符串来创建二叉树 /*** 使用层序遍历的字符串创建二叉树* param treeInfo* return*/public static TreeNode generateTreeNodeSecond(String treeInfo) {LinkedList<TreeNode> treeNodeLinkedList new LinkedList<>();if(StringUtils.is…...

PyQt6 QLabel标签控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计21条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…...

即时通讯技术文集(第24期):音视频WebRTC好文合集 [共20篇]

为了更好地分类阅读 52im.net 总计1000多篇精编文章&#xff0c;我将在每周三推送新的一期技术文集&#xff0c;本次是第 24 期。 [- 1 -] 开源实时音视频技术WebRTC的现状 [链接] http://www.52im.net/article-126-1.html [摘要] 作为Google开源的技术&#xff0c;WebRTC并不…...

HTML+CSS+JS网页设计与制作摄影类个人网页

可以使用网页三剑客htmlcssjs实现网页设计与制作&#xff0c;页面排版布局高端大气。 使用HTMLCSS页面布局设计&#xff0c;HTMLCSSJS网页设计与制作摄影类个人网页&#xff0c;这是一个优质的个人网页制作。 凭借简约的设计风格、精湛的制作工艺&#xff0c;突破与创新的理念…...

U-boot(五):启动内核

本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…...

tp8 使用rabbitMQ(2)工作队列

代码的参数说明在 第一小节的代码中&#xff0c;如果需要可移步到第一节中查看 工作队列 工作队列&#xff08;又称&#xff1a;任务队列——Task Queues&#xff09;是为了避免等待一些占用大量资源、时间的操作。当我们把任务&#xff08;Task&#xff09;当作消息发送到队列…...

ZKP11.4 Use CI to instantiate Fiat-Shamir

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 11: From Practice to Theory (Guest Lecturer: Alex Lombardi) 11.4 Use CI to instantiate Fiat-Shamir Avoid Bad Challenges Def: Given false claim x x x and a first message α \alpha α, a challenge β \beta …...

华为云编译构建CodeArts Build常见问答汇总

1.【Build】公有云编译构建是否支持导入外部机器做执行机 答&#xff1a;参考链接&#xff1a;https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0017.html • 使用代理机功能&#xff0c;需要配备1台4U8G或以上规格、磁盘>80GB的主机。 • 安装代理的…...

009 OpenCV 二值化 threshold

一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、二值化算法 2.1、概述 在机器视觉应用中&#xff0c;OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理&#xff0c;以此大幅降低图像的数…...

基于python的NBA球员数据可视化分析的设计与实现

完整下载&#xff1a;基于python的NBA球员数据可视化分析的设计与实现.docx 基于python的NBA球员数据可视化分析的设计与实现 Design and Implementation of NBA Player Data Visualization Analysis based on Python 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 …...

《使用Python将Excel数据批量写入MongoDB数据库》

在数据分析及处理过程中&#xff0c;我们经常需要将数据写入数据库。而MongoDB作为一种NoSQL数据库&#xff0c;其具有强大的可扩展性、高性能以及支持复杂查询等特性&#xff0c;广泛用于大规模数据存储和分析。在这篇文章中&#xff0c;我们将使用Python编写一个将Excel数据批…...

leetcode_828_统计子串中的唯一字符

题意&#xff1a;所有子串中单个字符出现的次数和 问题转化&#xff1a;对于串中的每个字符&#xff0c;只包含其一次的所有子串的个数和 关于求只包含某位置字符一次的子串个数 class Solution { public:int uniqueLetterString(string s) {/* ...A...A...A...*/int n s.size…...

「Java开发中文指南」IntelliJ IDEA插件安装(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 插件扩展了Intel…...

单机多卡训练

参考几个不错的帖子&#xff08;还没来得及整理&#xff09;&#xff1a; 基于pytorch多GPU单机多卡训练实践_多卡训练效果不如单卡-CSDN博客 关于PyTorch单机多卡训练_能用torch.device()实现多卡训练吗-CSDN博客 Pytorch多机多卡分布式训练 - 知乎 (zhihu.com) 当代研究生…...

数据库基础教程之数据库的创建(一)

双击打开Navicat&#xff0c;点击&#xff1a;文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数&#xff0c;然后点击&#xff1a;连接测试&#xff0c;连接成功后再点击确定。 点击新建数据库 数据库设置如下&#xff1a;...

Python教程:DataFrame列数据类型的转换

Pandas提供了多种数据类型转换方法。可以使用astype()函数来转换数据类型。例如&#xff0c;可以将字符串类型的列转换为整数类型的列&#xff1a; # Author : 小红牛 # 微信公众号&#xff1a;wdPython import pandas as pd# 创建包含字符串类型列的DataFrame df pd.DataFra…...

4-Python与设计模式--抽象工厂模式

4-Python与设计模式–抽象工厂模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上&#xff0c; 有三类可以选择的上餐品&#xff1a; 汉堡等主餐、小食、饮料。当我们选择好自己需要的食物&#xff0c;支付完成后&#…...

STM32 默认时钟更改 +debug调试

STM32时钟 文章目录 STM32时钟前言一、修改系统时钟二、DEBUG 前言 为什么我们要改STM32的时钟呢&#xff0c;打个比方在做SPI驱动的时候&#xff0c;需要16M的时钟&#xff0c;但是stm32默认是72的分频分不出来&#xff0c;这个时候我们就要改系统时钟了&#xff0c;那么怎么…...

转成String类型的几种方式

文章目录 1. String.valueOf()2. 包装类-toString()3. 使用字符串拼接4. 强制类型转换 (String) object5. 总结&#xff1a;6. 基本数据类型和包装类 1. String.valueOf() String.valueOf()&#xff1a;基本数据类型或包装类都可以通过 String.valueOf() 方法转为字符串表示形…...

Android BSP 开发之六

1.设定Android settings中某个xml文件&#xff08;包括其子项&#xff09;或者某个Preference不被搜索到 设定某个xml文件(包括子项)不被搜索到 找到该xml文件对应的fragment java文件中的SEARCH_INDEX_DATA_PROVIDER,在该provider中对isPageSearchEnabled方法进行重写并…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...