【发布时间】:2009-11-15 22:20:46
【问题描述】:
我正在尝试插入基于数组的二叉搜索树。
我不确定如何防止使用左右索引覆盖数据...
我是否将 leftchild 作为 tree[2 * i + 1] 并将 rightchild 作为 tree[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;
}
什么是正确的?...有没有人有任何基于数组的插入建议?我似乎陷入了无限递归
【问题讨论】:
-
您要达到的实际目标是什么? BST 和数组中的完整二叉树(如在二叉堆中)不能很好地混合,除非您将项目作为一组插入并且不需要增量修改 BST。
-
我转发了,我认为我现在走上了更好的轨道。谢谢。
标签: c++