c++ - C++ 如何生成 10,000 个唯一随机整数以存储在 BST 中?
问题描述
我正在尝试生成 10,000 个 1 到 20,000 范围内的唯一随机整数以存储在 BST 中,但不确定执行此操作的最佳方法。
我看到了一些关于如何使用数组或向量的好建议,但不适用于 BST。我有一个contains
方法,但我不相信它会在这种情况下工作,因为它用于搜索并返回关于找到所需数字需要多少次尝试的结果。下面是我得到的最接近的,但它不喜欢我的==
操作员。使用数组并将数组存储在 BST 中会更好吗?或者有没有更好的方法来使用下面的代码,以便在生成数字时将它们直接存储在树中?
for (int i = 0; i < 10000; i++)
{
int random = rand() % 20000;
tree1Ptr->add(random);
for (int j = 0; j < i; j++) {
if (tree1Ptr[j]==random) i--;
}
}
解决方案
您的代码中有几个问题。但是,让我们直接进入痛点。
主要问题是什么?
从您的代码中,很明显这tree1Ptr
是一个指针。原则上应该指向树的一个节点,它有两个指针,一个指向左节点,一个指向右节点。
所以在你的代码的某个地方,你应该有:
tree1Ptr = new Node; // or whatever the type of your node is called
但是,在您的内部循环中,您只是像使用数组一样使用它:
for (int i = 0; i < 10000; i++)
{
int random = rand() % 20000;
tree1Ptr->add(random);
for (int j = 0; j < i; j++) {
if (tree1Ptr[j]==random) //<============ OUCH !!
i--;
}
}
编译器不会抱怨,因为它是有效的语法:您可以在指针上使用数组索引。但是你要确保你不会越界(所以在这里,j 保持 <1)。
其他备注
顺便说一下,在内部循环中,你只想说如果找到数字就必须重试。如果已经找到号码,您可以break
内部循环,以免继续。
您还应该播种随机数生成器,以避免始终以相同的顺序运行程序。
如何解决?
你真的需要加深对BST的理解。在节点中导航需要与当前节点中的值进行比较,并根据结果,使用左指针或右指针继续迭代,而不使用索引。但是在这里解释太长了。所以可能你应该找一个教程,比如这个
推荐阅读
- swift - 如何使用 Xcode 10 中可用的 API 使枚举符合 Hashable?
- node.js - 如何在nodeJS中移动到下一行
- node.js - 喜欢计数器不会在其他客户端上更新(Laravel + Vue + Redis + Soket.io + Node)
- android - 可点击的viewpager onItem点击在片段内不起作用
- sql - 如何使用sql查询实现以下需求
- react-native - v1 到 v3 迁移,嵌套选项卡
- c# - 当类型未知时转换为具有泛型类型的对象
- python - 通过入口小部件添加到数据库中
- php - PHP $_SESSION 在所有函数的生产环境中始终为空,除了一个特定函数
- animation - Fabric jsstickman - 以编程方式为四肢设置动画并保持所有圆圈和线条之间的关节