我试图创建一个函数,返回二叉树的镜像副本.
左边的那个被复制成与右边的那个相似.这是函数的代码,包含二进制 node 的定义和我使用的"插入 node "函数:
typedef struct bNode {
int data;
struct bNode *left;
struct bNode *right;
} bNode;
// =============================================================
bNode* reverse_tree (bNode **tree) {
bNode *copy = malloc(sizeof(bNode));
copy->data = (*tree)->data;
if (!((*tree)->right) && !((*tree)->left)){
return copy;
}
copy->left = reverse_tree(&(*tree)->right);
copy->right = reverse_tree(&(*tree)->left);
return copy;
}
// =============================================================
void insert(bNode **tree, int data) {
bNode *temp, *previous, *current;
if (*tree == NULL) {
temp = (bNode *) malloc(sizeof (bNode));
temp->data = data;
temp->left = NULL;
temp->right = NULL;
*tree = temp;
return;
}
if (data < (*tree)->data) {
insert(&(*tree)->left, data);
} else if (data > (*tree)->data) {
insert(&(*tree)->right, data);
}
}
经过一些故障排除,一层递归可以正常工作,但在那之后,指针会中断(即,它们指向内存中不可访问的部分),程序会收到SIGSEGV分段错误.
为什么我会收到这个SIGSEGV,我如何避免它?
P、 我对指针缺乏经验;我希望不是太糟.
(左侧的复制与右侧的复制相似)