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

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例

  • 前言
  • 一、案例准备
  • 二、自动生成随机二叉树工具类(TreegenerateUtils)
  • 三、如何调用随机二叉树工具类(TreegenerateUtils)?


前言

今天笔者在测试有关二叉树的测试用例时,发现一点一点给节点添加孩子操作十分繁琐,于是写了一个自动生成二叉树测试用例函数,供大家参考。


一、案例准备

准备了一个二叉树节点类Node如下图所示

在这里插入图片描述


二、自动生成随机二叉树工具类(TreegenerateUtils)


  如下面代码所示,定义了一个TreegenerateUtil工具类,其中包含有静态方法generate自动生成随机二叉树,其中该方法有两个重载实现,该方法返回一个随机二叉树实例的根节点,其中两个重载方法都需要四个参数,其中前三个参数相同为currentDepth(树的深度),MaxDepth(树的最大深度),MaxValue(树的每个节点可以达到的最大值),最后一个参数第一个重载方法为Random类实例,目的是使得每次生成的随机树不同,而第二个重载方法的参数为Int数字,跟第一个重载方法也是同样的目的


package net.mooctest;import java.util.Random;/*** @ClassName TreeUtils* @Description* @Author chougou* @Date 2023年11月10日 21:19* @Version 1.0*/
public class TreegenerateUtils {public static Node generate(int currentDepth, int MaxDepth, int MaxValue, Random random1) {       //currentDepth为当前深度,MaxDepth为树的最大深度,MaxValue为节点可以达到的最大数,均可自行调节,random为随机数种子//因为每次递归深度不同,因此currentDepth+random可作为随机数种子if (currentDepth >= MaxDepth) {                     //当递归树的深度超过MaxDepth时候,递归结束return new Node(random1.nextInt(MaxValue));} else {Node node = new Node(random1.nextInt(MaxValue));//随机添加左孩子或者右孩子或者左右孩子或者无孩子//1,只添加左孩子int temp = random1.nextInt(100);if (temp % 3 == 0) {Node nodeleft = generate(currentDepth + 1, MaxDepth, MaxValue, random1);node.left = nodeleft;}//2.只添加右孩子if (temp % 3 == 1) {Node noderight = generate(currentDepth + 1, MaxDepth, MaxValue, random1);node.right = noderight;}//3.左右孩子均添加if (temp % 3 == 2) {Node noderight = generate(currentDepth + 1, MaxDepth, MaxValue, random1);Node nodeleft = generate(currentDepth + 1, MaxDepth, MaxValue, random1);node.left = nodeleft;node.right = noderight;}//4.最后一种即什么也不添加return node;}}public static Node generate(int currentDepth, int MaxDepth, int MaxValue, int random) {       //currentDepth为当前深度,MaxDepth为树的最大深度,MaxValue为节点可以达到的最大数,均可自行调节,random为随机数种子Random random1 = new Random(currentDepth + random);        //因为每次递归深度不同,因此currentDepth+random可作为随机数种子if (currentDepth >= MaxDepth) {                     //当递归树的深度超过MaxDepth时候,递归结束return new Node(random1.nextInt(MaxValue));} else {Node node = new Node(random1.nextInt(MaxValue));//随机添加左孩子或者右孩子或者左右孩子或者无孩子//1,只添加左孩子int temp = random1.nextInt(100);if (temp % 3 == 0) {Node nodeleft = generate(currentDepth + 1, MaxDepth, MaxValue, random);node.left = nodeleft;}//2.只添加右孩子if (temp % 3 == 1) {Node noderight = generate(currentDepth + 1, MaxDepth, MaxValue, random);node.right = noderight;}//3.左右孩子均添加if (temp % 3 == 2) {Node noderight = generate(currentDepth + 1, MaxDepth, MaxValue, random);Node nodeleft = generate(currentDepth + 1, MaxDepth, MaxValue, random);node.left = nodeleft;node.right = noderight;}//4.最后一种即什么也不添加return node;}}
}


三、如何调用随机二叉树工具类(TreegenerateUtils)?


  如下面程序示例,通过调用TreegenerateUtils的静态函数generate生成4个根节点,其中每个根节点均不相同


 @Testpublic void testTreegenerateUtils(){//下面生成四个最大深度为10,节点可达到最大值为100的四个随机二叉树实例Random random1=new Random();Node root1=TreegenerateUtils.generate(1,10,100,random1.nextInt());Node root2=TreegenerateUtils.generate(1,10,100,random1.nextInt());Node root3=TreegenerateUtils.generate(1,10,100,random1);Node root4=TreegenerateUtils.generate(1,10,100,random1);}

运行结果展示:(每个根节点均不相同)
在这里插入图片描述

相关文章:

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例 前言一、案例准备二、自动生成随机二叉树工具类(TreegenerateUtils)三、如何调用随机二叉树工具类(TreegenerateUtils)? 前言 今天笔者在测试有关二叉树的…...

防火防盗防小人 使用 Jasypt 库来加密配置文件

⚔️ 项目配置信息存放在哪? 在日常开发工作中,我们经常需要使用到各种敏感配置,如数据库密码、各厂商的 SecretId、SecretKey 等敏感信息。 通常情况下,我们会将这些敏感信息明文放到配置文件中,或者放到配置中心中。…...

Spring Cloud学习(二)【Eureka注册中心】

文章目录 Eureka 注册中心Eureka 的作用 动手实践搭建 EurekaServer服务注册服务发现 Ribbon 负载均衡负载均衡原理IRule 接口(负载均衡策略)饥饿加载 Eureka 注册中心 服务调用出现的问题 不能采用硬编码服务消费者该如何获取服务提供者的地址信息&am…...

数据分析实战 | 线性回归——女性身高与体重数据分析

目录 一、数据集及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 实现回归分析类算法的Python第三方工具包比较常用的有statsmodels、statistics、scikit-learn等&#…...

python回文日期 并输出下一个ABABBABA型回文日期

题目: 输入: 输入包含一个八位整数N,表示日期 对于所有的测评用例,10000101 ≤N≤89991231,保证N是一个合法日期的8位数表示 输出: 输出两行,每行一个八位数。第一行表示下一个回文日期第二…...

Zotero拓展功能之Zotero Style

Zotero Style拓展功能 一、列: 1.简介 首先你必须知道Zotero的基本功能:右键任意一个列的名字,会弹出一个右键菜单,你可以勾选/取消勾选一个列,并且在最后有两个按钮,一个是“列设置”,一个是…...

小程序提交表单之后,清除表单form

构造表单 <form bindsubmit"bindFormSubmit"> <view class"main"><textarea name"textarea" value"{{content}}"></textarea> <button form-type"submit" type"primary" > 提交 &…...

Java程序设计实验5 | Java API应用

*本文是博主对Java各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &#xff08;解…...

自媒体项目详述

总体框架 本项目主要着手于获取最新最热新闻资讯&#xff0c;以微服务构架为技术基础搭建校内仅供学生教师使用的校园新媒体app。以文章为主线的核心业务主要分为如下子模块。自媒体模块实现用户创建功能、文章发布功能、素材管理功能。app端用户模块实现文章搜索、文章点赞、…...

客服呼叫中心的语音质检工作

语音质检是呼叫中心运营中必不可缺少的一个环节&#xff0c;呼叫中心语音质检对坐席起着直接监督的作用&#xff0c;也正是这种监督约束推动着客服人员不断提升自身的业务能力。 而客服呼叫中心的质检结果中还蕴藏了大量有价值的信息&#xff0c;可以通过日常的质检工作真正发现…...

深度解密 | 灵脉SAST 3.0最新特性曝光

一、多模智能引擎焕新 2023年6月&#xff0c;灵脉SAST入选国际权威咨询机构Forrester发布的《The Static Application Security Testing Landscape》报告成为全球范围内仅有的两款亚太区SAST代表产品之一。 此次3.0版本重大焕新&#xff0c;灵脉SAST从检测工具的灵魂核心入手…...

NowCode JZ39 数组中出现次数超过一半的数字 简单

题目 - 点击直达 1. JZ39 数组中出现次数超过一半的数字 简单1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. JZ39 数组中出现次数超过一半的数字 简单 1. 题目详情 1. 原题链接 NowCode JZ39 数组中出现次数超过一半的数…...

【SA8295P 源码分析 (一)】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数

【SA8295P 源码分析】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数 一、配置 TLMM GPIO15 中断示例代码二、配置 PMIC2 GPIO1 中断示例代码三、easy_irq 实现源码分析3.1 struct _easy_irq_ctx 结构体内容分析3.2 register_easy_irq_callbac…...

电大搜题:开启智能学习新时代

尊敬的读者朋友们&#xff0c;今天我将向您介绍一款能够让您轻松搜题、高效学习的神奇工具&#xff1a;电大搜题&#xff01;作为湖北开放大学和广播电视大学的学习者&#xff0c;您一定对于繁重的课业和复杂的试题感到头疼。但是&#xff0c;现在有了电大搜题微信公众号&#…...

19、Flink 的Table API 和 SQL 中的自定义函数及示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Vue23-props配置功能

Vue2&3-props配置功能 Vue2-props配置 功能&#xff1a;接收从其他组件传过来的数据&#xff0c;将数据从静态转为动态注意&#xff1a; 同一层组件不能使用props&#xff0c;必须是父组件传子组件的形式。父组件传数据&#xff0c;子组件接收数据。不能什么数据都接收&a…...

怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频

业务中需要在网页中直接播放rtsp和rtmp视频&#xff0c;多方比较测试发现ovsyunlive的播放器能直接播放rtsp/rtmp视频&#xff0c;还是非常方便简洁&#xff0c;使用过程如下&#xff1a; 1&#xff0c;Windows系统在github上面下载ovsyunlive绿色包下载解压。 github地址&am…...

MySQL | 查询接口性能调优、编码方式不一致导致索引失效

背景 最近业务反馈&#xff0c;列表查询速度过慢&#xff0c;需要优化。 到正式环境系统去验证&#xff0c;发现没筛选任何条件的情况下&#xff0c;查询需要三十多秒&#xff0c;而筛选了条件之后需要13秒。急需优化。 先说结论&#xff1a;连表用的字段编码方式不一致导致索…...

ASUS华硕灵耀X2 Duo UX481FA(FL,FZ)_UX4000F工厂模式原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1sRHKBOyc3zu1v0qw4dSASA?pwd7nb0 提取码&#xff1a;7nb0 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序所需要工具&#xff1a;16G或以上…...

企业安全—三保一评

0x00 前言 本篇主要是讲解三保一评的基础知识&#xff0c;以及对为什么要进行这些内容的原因进行总结。 0x01 整体 1.概述 三保分别是&#xff0c;分保&#xff0c;等保&#xff0c;关保。 分保就是指涉密信息系统的建设使用单位根据分级保护管理办法和有关标准&#xff0c…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...