我写了一个函数来取消BST的所有叶子. BST当然有一个左右指针和一个名为data的char来存储节点的值.
void removeLeaves(struct Tree* T){
if(T->left == NULL && T->right == NULL){
printf("removing %c\n", T->data);
T=NULL;
}
else{
if(T->left!=NULL){
removeLeaves(T->left);
}
if(T->right!=NULL){
removeLeaves(T->right);
}
}
}
我在调用此函数之前和之后打印树.
虽然上面的print语句可以工作并打印出无效的节点,但结果树是相同的.
我有类似的东西:
print(BST);
removeLeaves(BST);
print(BST);
知道发生了什么事吗?
谢谢.
最佳答案 T = NULL;将null赋给本地指针,而不是树中的任何内容.您需要使用结构树**,以便您可以修改结构树*:
void removeLeaves(struct Tree ** T){
if((*T)->left == NULL && (*T)->right == NULL){
printf("removing %c\n", (*T)->data);
*T = NULL;
}
else{
if((*T)->left!=NULL){
pruneTree((*T)->left);
}
if((*T)->right!=NULL){
pruneTree((*T)->right);
}
}
}