网站建设在哪里做比较好,申请带域名的免费空间,小红书推广平台有哪些,泉州网站设计公司【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例 前言一、案例准备二、自动生成随机二叉树工具类#xff08;TreegenerateUtils#xff09;三、如何调用随机二叉树工具类#xff08;TreegenerateUtils#xff09;#xff1f; 前言
今天笔者在测试有关二叉树的… 【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例 前言一、案例准备二、自动生成随机二叉树工具类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为随机数种子//因为每次递归深度不同因此currentDepthrandom可作为随机数种子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); //因为每次递归深度不同因此currentDepthrandom可作为随机数种子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 random1new Random();Node root1TreegenerateUtils.generate(1,10,100,random1.nextInt());Node root2TreegenerateUtils.generate(1,10,100,random1.nextInt());Node root3TreegenerateUtils.generate(1,10,100,random1);Node root4TreegenerateUtils.generate(1,10,100,random1);}运行结果展示每个根节点均不相同