이것은 내가 지금까지 가지고있는 것이다. 배열 기반 바이너리 검색 트리 C++로 나를 도울 수 있습니까?
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;
}
else
{
root_index++;
items[root_index].theData = items[leftChild].theData;
items[root_index].empty = false;
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
{//this where the problem is for "Z" insertion
root_index++;
items[root_index].theData = items[rightChild].theData;
items[root_index].empty = false;
this->insert(aData);
}
}
else return;
}
items[1].theData = oldRoot.theData;
}
생성자 : 그것은 작품을 나던
BST::BST(int capacity) : items(new item[capacity]), size(0),
leftChild(0), rightChild(0), root_index(1)
{
items->empty = true;
maxSize = capacity-1;
}
. 나는 이유를 모른다. 나는 균형을 이루도록 코드를 작성하는 것 같다. 내가 "Z"를 삽입 할 때
R
/
A
\
F
, "R", "A"및 "F"를 삽입, 그래서 F의 권리 자식이 : 내가 지금까지 가지고하는 것은 유사한 나무입니다.
R
/\
A Z
\
F
누군가가 나에게 그런 식으로 활용할 수 있도록 수 :하지만 정말 루트의 권리 자녀해야 하는가?
먼저해야 할 일. RAF 트리가 균형을 이루지 않았습니다. 균형 잡힌 버전은 A를 루트까지 올렸을 것입니다. 왼쪽 노드에는 F가 있고 오른쪽 노드에는 R이 있습니다. 이진 나무는 반드시 균형 나무가 아닙니다. – paxdiablo
어떻게 쉽게 고칠 수 있습니까? – user40120
이것이 당신의 이전 질문과 어떻게 관련되어 있는지 신경을 써야합니다 : http://stackoverflow.com/questions/1739067/inserting-into-an-array-based-binary-search-tree-c? – dmckee