在 C 中创建包含其他结构的二叉树的深层副本
Creating a deep copy of a binary tree containing other structures in C
我有这个函数可以创建整个二叉树的深层副本。
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;
}
当我在原始 table 中更改 value
时,它也会在复制的 table 中更改。
如何创建它的深拷贝?
提前感谢您的帮助。
在:
value_t *newValue = malloc(sizeof(value_t));
你为一个对象分配了内存。看起来,node
包含一个指向值对象的 指针 。有
newValue = node->value;
你复制指针。要复制值,请使用:
*newValue = *node->value;
现在您可以将对象放置在您的新节点中:
newSymbol->value = newValue;
N.b.: 不要忘记在 node->value==NULL
时设置 newSymbol->value= NULL;
我有这个函数可以创建整个二叉树的深层副本。
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;
}
当我在原始 table 中更改 value
时,它也会在复制的 table 中更改。
如何创建它的深拷贝?
提前感谢您的帮助。
在:
value_t *newValue = malloc(sizeof(value_t));
你为一个对象分配了内存。看起来,node
包含一个指向值对象的 指针 。有
newValue = node->value;
你复制指针。要复制值,请使用:
*newValue = *node->value;
现在您可以将对象放置在您的新节点中:
newSymbol->value = newValue;
N.b.: 不要忘记在 node->value==NULL
newSymbol->value= NULL;