简体   繁体   English

在 C 中创建包含其他结构的二叉树的深层副本

[英]Creating a deep copy of a binary tree containing other structures in C

I have this function that's supposed to create a deep copy of a whole binary tree.我有这个 function 应该创建整个二叉树的深层副本。

symbol_t* cloneTable(symbol_t *node) {

    if (node == NULL)
        return node;

    symbol_t *newSymbol = malloc(sizeof(symbol_t));
    newSymbol->type = node->type;
    newSymbol->key = node->key;

    if (node->value != NULL) {
        value_t *newValue = malloc(sizeof(value_t));
        newValue = node->value;
        newSymbol->value = newValue;
    }

    newSymbol->leftChild = cloneTable(node->leftChild);
    newSymbol->rightChild = cloneTable(node->rightChild);

    return newSymbol;
}

When I change value in the original table, it gets changed in the copied table, too, however.但是,当我更改原始表中的value时,复制表中的值也会更改。

What can I do to create a deep copy of it?我可以做些什么来创建它的深层副本?

Thank you in advance for any help.预先感谢您的任何帮助。

In:在:

    value_t *newValue = malloc(sizeof(value_t));

you allocate memory for an object.您为 object 分配 memory。 As it looks, node contains a pointer to a value object.看起来, node包含一个指向值 object 的指针。 With

    newValue = node->value;

you copy the pointer.你复制指针。 To copy the value, use:要复制该值,请使用:

    *newValue = *node->value;

Now you can place the object in your new node:现在您可以将 object 放在新节点中:

    newSymbol->value = newValue;

Nb: Don't forget to set newSymbol->value= NULL;注意:不要忘记设置newSymbol->value= NULL; when node->value==NULLnode->value==NULL

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM