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 函数,该函数将 Node 作为其参数。同样在此功能中,您必须检查左/右孩子是否有另一棵树。

目前,您只需构建一个新节点,无论那里有什么。这将覆盖任何以前的插入。

于 2011-03-20T18:47:26.560 回答