二叉树--算法题总结
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视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计21条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…...
即时通讯技术文集(第24期):音视频WebRTC好文合集 [共20篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第 24 期。 [- 1 -] 开源实时音视频技术WebRTC的现状 [链接] http://www.52im.net/article-126-1.html [摘要] 作为Google开源的技术,WebRTC并不…...
HTML+CSS+JS网页设计与制作摄影类个人网页
可以使用网页三剑客htmlcssjs实现网页设计与制作,页面排版布局高端大气。 使用HTMLCSS页面布局设计,HTMLCSSJS网页设计与制作摄影类个人网页,这是一个优质的个人网页制作。 凭借简约的设计风格、精湛的制作工艺,突破与创新的理念…...
U-boot(五):启动内核
本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…...
tp8 使用rabbitMQ(2)工作队列
代码的参数说明在 第一小节的代码中,如果需要可移步到第一节中查看 工作队列 工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源、时间的操作。当我们把任务(Task)当作消息发送到队列…...
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】公有云编译构建是否支持导入外部机器做执行机 答:参考链接:https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0017.html • 使用代理机功能,需要配备1台4U8G或以上规格、磁盘>80GB的主机。 • 安装代理的…...
009 OpenCV 二值化 threshold
一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、二值化算法 2.1、概述 在机器视觉应用中,OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理,以此大幅降低图像的数…...
基于python的NBA球员数据可视化分析的设计与实现
完整下载:基于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数据库》
在数据分析及处理过程中,我们经常需要将数据写入数据库。而MongoDB作为一种NoSQL数据库,其具有强大的可扩展性、高性能以及支持复杂查询等特性,广泛用于大规模数据存储和分析。在这篇文章中,我们将使用Python编写一个将Excel数据批…...
leetcode_828_统计子串中的唯一字符
题意:所有子串中单个字符出现的次数和 问题转化:对于串中的每个字符,只包含其一次的所有子串的个数和 关于求只包含某位置字符一次的子串个数 class Solution { public:int uniqueLetterString(string s) {/* ...A...A...A...*/int n s.size…...
「Java开发中文指南」IntelliJ IDEA插件安装(一)
IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 插件扩展了Intel…...
单机多卡训练
参考几个不错的帖子(还没来得及整理): 基于pytorch多GPU单机多卡训练实践_多卡训练效果不如单卡-CSDN博客 关于PyTorch单机多卡训练_能用torch.device()实现多卡训练吗-CSDN博客 Pytorch多机多卡分布式训练 - 知乎 (zhihu.com) 当代研究生…...
数据库基础教程之数据库的创建(一)
双击打开Navicat,点击:文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数,然后点击:连接测试,连接成功后再点击确定。 点击新建数据库 数据库设置如下:...
Python教程:DataFrame列数据类型的转换
Pandas提供了多种数据类型转换方法。可以使用astype()函数来转换数据类型。例如,可以将字符串类型的列转换为整数类型的列: # Author : 小红牛 # 微信公众号:wdPython import pandas as pd# 创建包含字符串类型列的DataFrame df pd.DataFra…...
4-Python与设计模式--抽象工厂模式
4-Python与设计模式–抽象工厂模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上, 有三类可以选择的上餐品: 汉堡等主餐、小食、饮料。当我们选择好自己需要的食物,支付完成后&#…...
STM32 默认时钟更改 +debug调试
STM32时钟 文章目录 STM32时钟前言一、修改系统时钟二、DEBUG 前言 为什么我们要改STM32的时钟呢,打个比方在做SPI驱动的时候,需要16M的时钟,但是stm32默认是72的分频分不出来,这个时候我们就要改系统时钟了,那么怎么…...
转成String类型的几种方式
文章目录 1. String.valueOf()2. 包装类-toString()3. 使用字符串拼接4. 强制类型转换 (String) object5. 总结:6. 基本数据类型和包装类 1. String.valueOf() String.valueOf():基本数据类型或包装类都可以通过 String.valueOf() 方法转为字符串表示形…...
Android BSP 开发之六
1.设定Android settings中某个xml文件(包括其子项)或者某个Preference不被搜索到 设定某个xml文件(包括子项)不被搜索到 找到该xml文件对应的fragment java文件中的SEARCH_INDEX_DATA_PROVIDER,在该provider中对isPageSearchEnabled方法进行重写并…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
