【发布时间】:2018-05-09 01:24:43
【问题描述】:
我想让一个函数能够删除一个分支(甚至整个树)。树的结构如下:
typedef struct node {
char data;
struct node *child;
struct node *sibling;
}*tree;
我创建了一个函数,它能够在树中找到给定数据,然后返回该节点的地址,然后将其删除。假设我想删除数据中包含B 的节点,它应该删除它的所有子节点和节点本身,然后我应该留下以下树:
R R
| |
B _ C _ D -->> C _ D
| | |
E _ F G G
我有以下函数,但它只对删除整个树有用,如果我用它来删除分支,我将留下指向已释放内存的指针。
void delete_branch(tree node){
if(node != NULL)
{
delete_branch(node->child);
delete_branch(node->sibling);
free(node);
}
}
我知道问题出在哪里,我只需要更新指针,使它们再次指向正确的位置,但我不知道如何处理涉及的递归函数。如果需要更多信息,请随时询问。
【问题讨论】: