去除叶子不会影响BST – C.

我写了一个函数来取消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);
    }
  }  
}
点赞