[英]C++ Insert Into Binary Search Tree Using Array
因此,在此特定程序中,我将节点存储在节点向量中。 这些节点包含用户输入的int ID,int年龄和字符串Name。
此向量旨在充当由ID号组织的二叉搜索树,并且不担心被平衡。
当前,我正在尝试编写一个插入函数,在该函数中,在创建用户输入值的新节点之后,将其与根进行比较,该根存储在向量的索引1中。
如果它小于根的ID,则将其放置在位置(根* 2)。 如果它大于根,则将其放置在位置(根* 2 +1)
但是,如果这两个点已经被另一个节点占用,那么放入向量中的难度将非常大。
有什么办法可以创建一个循环来检查填充点中的值,并继续循环直到找到空点?
我正在使用的当前示例
ID 50,ID 100,ID 75
ID 50在位置1。
ID 100插入位置3,因为它为空(2 * 1)
尝试插入ID 75,但填充了位置3,因此我需要使用相同算法将其与位置3中的ID进行比较。 在这种情况下,由于75小于100,它将被放置在位置4。
我完全不知道如何将这样的算法实现为循环
任何帮助将非常感激。
这是我的代码。
无效的BST :: insert(){
int ID;
int AGE;
string NAME;
bool done = false;
int root = 1;
cout << "Please enter the ID number, age and name" << endl;
do
{
cin >> ID >> AGE >> NAME;
} while (ID <= 0);
Node *tree = new Node(ID, AGE, NAME);
if (!binaryTree.empty())
{
do
{
Node &n = binaryTree.at(root);
if (n.ID == 0)
{
n.ID = ID;
n.age = AGE;
n.name = NAME;
done = true;
break;
}
else if (ID < n.ID)
{
root = 2 * root;
}
else
{
root = 2 * root + 1;
}
} while (done = true);
}
if (binaryTree.empty())
{
binaryTree.push_back(*tree);
}
start();
}
我对这门语言还很陌生,因此对您的帮助将不胜感激!
编辑:
我修复了一些差异,并添加了建议的代码,但是,现在引发了out_of_bounds异常。
谢谢!
我的问题本质上是,我如何将这样的算法转换为while循环/执行while循环等
这是使用伪代码的答案。 您应该使用不同的构造(例如while , do while或for循环)自行重写循环。
但是首先,您的代码存在一些问题。
您正在将Node.ID
(一个int)与NULL
以检查向量中的位置是否为“空”。 NULL
与0
具有相同的语义,因此我将假设没有ID为0
。 您的代码实际上并未对此进行检查,因此您可能需要处理这种情况和/或解决这些设计问题。
我不知道如果使用向量存储节点,为什么要动态分配new
内存。 这可能会导致内存泄漏。
我假设您正在处理尚未发布的代码中的适当大小的向量。 如果不这样做,那么当root
在向量的边界之外时, at
抛出异常时,您的代码将崩溃。
如果它小于根的ID,则将其放置在位置(根* 2)。 如果它大于根,则将其放置在位置(根* 2 +1)
最后,带有goto循环的代码。
int root = 1;
BEGIN LOOP
Node &n = binaryTree.at(root);
if (n.ID == 0)
{
n.ID = ID;
n.age = AGE;
n.name = NAME;
BREAK OUT OF LOOP
}
else if (ID < n.ID)
{
root = 2*root;
}
else
{
root = 2*root + 1;
}
REPEAT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.