嗯,我一直在這裏一段時間...試圖找出一種算法,將我的隨機數列表插入到二叉樹中。幫助將值列表插入二叉樹..?
這是我迄今爲止得到:
NODEPTR和樹都指向一個節點
NodePtr CreateTree(FILE * fpData)
{
int in;
fscanf(fpData, "%i", &in);
Tree T = (NodePtr)malloc(sizeof(Node));
T->Left = NULL;
T->Right = NULL;
T->value = in;
while((fscanf(fpData, "%i", &in)) != EOF)
{
InsertInTree(in, T);
printf("\n %p", T);
}
return T;
}
void InsertInTree(int value,Tree T)
{
if(T == NULL)
{
T->Left = (NodePtr)malloc(sizeof(Node));
T->Left->Left = NULL;
T->Left->Right = NULL;
T->Left->value = value;
printf("\n %i ", value);
return;
}
if(T->Left == NULL)
{
InsertInNull(value, T->Left);
}
else if(T->Right == NULL)
{
InsertInNull(value, T->Right);
}
else
{
if(T->Left->Left == NULL || T->Left->Right == NULL) InsertInTree(value, T->Left);
else InsertInTree(value, T->Right);
}
}
我迷路了。如果一個特定節點的兩個孩子都沒有做什麼空值。我在這裏所做的只是少量數字(1,2,3,5,6),但如果列表較大,它會變得不平衡並且是錯誤的。
這個二叉樹的目的是什麼?例如,在二叉搜索樹中,在每個節點上,將要插入的值與該節點的值進行比較。如果它小於(或等於,爲了論點的緣故)你檢查左子樹的值。如果它更大,你檢查正確的。無論何時您嘗試檢查一個空的子樹,都會創建一個新的葉節點併爲其添加值。你似乎總是以任何一種方式未被填充? – Tommy 2010-11-07 23:11:24
你的選擇是重新平衡自己。或者使用一種略微不同的算法,如自動重新平衡的[紅黑樹] [1]。 [1]:http://en.wikipedia.org/wiki/Red-black_tree – Wolph 2010-11-07 23:11:37
我想我知道我現在需要做什麼....我可能誤解了我對這個二叉樹的設想。我需要訂購它。感謝大家。 – Bri 2010-11-07 23:14:57