A(左)とB(右)がすでにいっぱいの場合、バイナリツリーにノードを追加するにはどうすればよいですか?バランスのとれたツリーを作成するだけです。しかし、ツリーにデータを追加する方法を理解することはできません。どんな助けでも大歓迎です。Cでバイナリツリーにノードを追加する方法は?
ありがとうございます。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
struct node
{
char *titel;
struct node *A;
struct node *B;
};
void display(struct node *leaf)
{
if (leaf != NULL)
{
display(leaf->A);
printf("%s\n",leaf->titel);
display(leaf->B);
}
}
struct node *insert(char* titel, struct node **leaf)
{
if (*leaf == 0)
{
*leaf = (struct node*)malloc(sizeof(struct node));
(*leaf)->titel = malloc(strlen(titel)+1);
strcpy((*leaf)->titel,titel);
(*leaf)->A = NULL;
(*leaf)->B = NULL;
}
else if ((*leaf)->A == NULL)
{
(*leaf)->A = insert(titel,&(*leaf)->A);
}
else if ((*leaf)->B == NULL)
{
(*leaf)->B = insert(titel,&(*leaf)->B);
}
//WHAT TO ADD HERE TO CREATE ANOTHER NODE?
return(*leaf);
}
int main(int argc, char const *argv[])
{
struct node *root = NULL;
insert("root",&root);
insert("chapter_1A",&root);
insert("chapter_1B",&root);
insert("chapter_2A",&root);
insert("chapter_2B",&root);
insert("chapter_3A",&root);
display(root);
return 0;
}
出力はバランスのとれたバイナリツリーのようにする必要があります。印字する必要はありませんが、メモリにそのように保存してください。
実際の出力:
chapter_1A
root
chapter_1B
root
/ \
chapter_1A chapter_1B
/ \ / \
ch_2A ch_2B ch_3A ch_3B
and so on.
ツリーがいっぱいになることはありますか? –
正確な問題は何ですか?あなたはどんなアウトプットを受け取り、どんなアウトプットを期待していますか? –
私は自分のツリーに別のノードを追加する方法を知らない。それは私の問題です。私は、ルートノードを作成して、次にルートの左側を塗り、次に右側を塗りつぶします。しかし、左サイドノードまたは右サイドノードから別のブランチを作成する方法はわかりません。それは私の正確な問題です。 編集:入力はメインに表示されます。 出力は、左から右に向かって開始するツリーでなければなりません。 ルート /\ ch_A1 ch_B1 /\/\ A2 B2 A3 B3 ちょうど平衡二分探索木のように。 –