0

BST 用にいくつかのメソッドをコーディングする必要があり、いくつか問題があります。説明させてください。

私は次の構造を持っています:

struct node {
    struct node *lChild; 
    struct node *rChild; 
    int value; 
};

struct tree {
    struct node *root;
};

次の機能とともに:

struct tree* constructNewTree()
{
    struct tree *T=malloc(sizeof(struct tree));
    T->root=NULL;

    return T;
}

struct node* constructNewNode(int i)
{
    struct node *N=malloc(sizeof(struct node));
    N->value=i;
    N->lChild=NULL;
    N->rChild=NULL;

    return N;
}

そして、私のメインでは、これを呼び出す必要があります(たとえば):

int main()
{
    struct tree *T;
    T=constructNewTree();

    insertKey(5,T);
    insertKey(2,T);
    insertKey(9,T);
    return 0;
}

私がしなければならないことは、再帰を使用して関数 insertKey(int i, struct tree *T) を作成することです。

私は何かをしたかった

void insertKey(int i, struct tree *T)
{
    if (T->root==NULL) {
        T->root=constructNewNode(i);
        return;
    }
    else {
        if (i<=T->root->value) {
            T->root->lChild=constructNewNode(i);
        else if (i>T->root->value) {
            T->root->rChild=constructNewNode(i);
        }
    }
}

再帰を使用すると、insertKey を再度呼び出すことができますが、ノードとツリーを同じように使用することはできないようです。

指定された構造を変更せずにそれを行う方法を知っている人はいますか?

どうもありがとうございました。

4

1 に答える 1

1

insertKey は引数として Tree を取ります。ツリーは、最上部へのポインターにすぎません。

私がお勧めするのは、ノードを引数に取る insertKey 関数を作成することです。また、この関数では、左右の子に別のツリーがあるかどうかを確認する必要があります。

現在、そこにあるものに関係なく、新しいノードを構築するだけです。これにより、以前の挿入が上書きされます。

于 2011-03-20T18:47:26.560 に答える