当前位置: 首页 > 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方法进行重写并…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...

iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)

崩溃、内存飙升、后台任务未释放、页面卡顿、日志丢失——稳定性问题&#xff0c;不一定会立刻崩&#xff0c;但一旦积累&#xff0c;就是“上线后救不回来的代价”。 稳定性保障不是某个工具的功能&#xff0c;而是一套贯穿开发、测试、上线全流程的“观测分析防范”机制。 …...