二分探索木 (作成、削除、検索) を実装する宿題があります。先生から提供された例を使用しましたが、うまくいきません。
これまでの私のコードは次のとおりです。
void insert_node(int k){
struct node *nodnou,*flow,*parent;
nodnou = (struct node*)malloc(sizeof(node));
nodnou->st = NULL;
nodnou->dr = NULL;
nodnou->nr = k;
if (root==NULL)
{
root = (struct node*)malloc(sizeof(node));
root = nodnou;
}
else
{
flow = (struct node*)malloc(sizeof(node));
parent = (struct node*)malloc(sizeof(node));
flow = root;
parent = root;
while (((flow->st!=NULL) || (flow->dr!=NULL)) && flow!=NULL)
{
if (k<flow->nr)
{
parent = flow;
flow = flow->st;
}
else
{
parent = flow;
flow = flow->dr;
}
}
if (k<flow->nr)
{
parent->st = nodnou;
}
else
{
parent->dr = nodnou;
}
}
}
考え方: この関数は、挿入したいノードの値を k パラメータとして取得します。関数はツリーのルートのみを挿入します (ルートはグローバル変数です)。
私の最大の問題はwhile
、ツリーをスイープして新しいノードの場所を見つけるループだと思います。
フローポインタが存在しないものへの割り当てを取得するため、使用while (flow!=NULL)
しても機能しません。どこが間違っているかを理解するのを手伝ってください(宿題)。