我試圖插入基於數組的二進制搜索樹。插入基於數組的二叉搜索樹? 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