我试图插入基于数组的二进制搜索树。插入基于数组的二叉搜索树? C++
我不知道我如何防止使用左,右的索引覆盖数据...
我插入leftchild作为树[2 * I + 1]和rightchild作为树[2 * I + 2]?我认为它是定位一个节点的位置给定其名称...
这就是我的问题。不知道如何插入,递归或迭代(递归选择,但它可能是完全错误的)。
BST::BST(int capacity) : items(new item[capacity]), size(0),
leftChild(0), rightChild(0), root_index(1)
{
items->empty = true;
maxSize = capacity-1;
}
下面是插入函数。我见过很多与链表实现有关的事情,但没有任何基于数组的东西!这是我的尝试:
void BST::insert(const data& aData)
{
if (items[root_index].empty)
{
items[root_index].theData = aData;// Get the data.
items[root_index].empty = false;
oldRoot.theData = aData;
}
else
{
if (aData < items[root_index].theData)
{
leftChild = root_index * 2;
if (items[leftChild].empty)
{
items[leftChild].theData = aData;
items[leftChild].empty = false;
}//items->empty = true;
else
{
items[root_index].theData = items[leftChild].theData;
this->insert(aData);
}
}
else if (items[root_index].theData < aData)
{
rightChild = root_index * 2 + 1;
if (items[rightChild].empty)
{
items[rightChild].theData = aData;
items[rightChild].empty = false;
}
else//items->empty = true;
{
items[root_index].theData = items[rightChild].theData;
this->insert(aData);
}
}
else return;
}
items[1].theData = oldRoot.theData;
}
什么是正确的?...有没有人有任何基于阵列的suggstions插入?我似乎陷入了无限递归
你试图达到的目标是什么? BST和二进制树中的完整二进制树(如二进制堆)不能很好地混合,除非您将项目作为集合插入并且不需要逐步修改BST。 – 2009-11-15 22:45:23
我转贴了,我想我现在处在一个更好的轨道上。谢谢。 – user40120 2009-11-15 23:45:29