【发布时间】:2018-09-04 09:22:54
【问题描述】:
我必须释放一棵树并使用特定函数将其根设置为 NULL。我尝试使用递归方法。但是如果我编译我会收到一些关于“不兼容的指针类型”的警告,我无法解决它。这是结构:
typedef struct node {
int key;
struct node *left, *mid, *right;
} node_t;
这里是函数。第一行不能改:
void free_tree (node_t ** root){
if(root != NULL){
free_tree((*root)->left);
free_tree((*root)->mid);
free_tree((*root)->right);
free(*root);
}
return;
}
任何帮助将不胜感激
【问题讨论】:
-
欢迎来到 stackoverflow.com。请花一些时间阅读the help pages,阅读the SO tour,阅读有关how to ask good questions 的信息,同时阅读this question checklist。最后请学习如何创建Minimal, Complete, and Verifiable Example。
-
另外,当询问有关构建错误或警告的问题时,请完整完整地包含您通过复制粘贴获得的确切消息作为文本。并标出(使用 cmets)在代码中出现错误或警告的位置。
-
所有这些指针都应该通过地址传递;您在递归调用中按值传递它们。例如:
free_tree((*root)->left)应该是free_tree(&(*root)->left)。这让我相信,free_tree的初始调用者很可能也是错误的,但我们不方便地没有得到该代码的祝福。最后,您应该在递归之前检查root和*root。 -
最后提示您的问题:
(*root)->left的类型是什么?free_tree期望的类型是什么? -
@SandeepKokate 当然,谢谢。
标签: c pointers tree double-pointer