c - 如何使用双指针释放树结构?
问题描述
我必须释放一棵树并使用特定函数将其根设置为 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;
}
任何帮助,将不胜感激
解决方案
你的问题不能很清楚地回答,但至少我可以告诉你为什么你有这个警告incompatible pointer type
:
你的函数原型是
void free_tree (node_t ** root);
它的论点是一个node_t **
.
你的结构是
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); <<< '(*root)->left' is of type 'node_t *'
free_tree((*root)->mid); <<< '(*root)->mid' is of type 'node_t *'
free_tree((*root)->right); <<< '(*root)->right' is of type 'node_t *'
free(*root);
}
return;
}
您称您为函数提供一个node_t *
as 参数,而您的函数需要一个node_t **
推荐阅读
- function - 在函数中传递 nano 一个特定的文件名
- velo - wixStores_onFulfillmentUpdated 未触发
- c# - Linq 查询 FromSql 在哪里传递字符串值
- javascript - 使用 framer-motion 为 react-router 设置动画的问题
- azure-functions - 我可以通过我的 webhook 将事件直接发送到 Azure 事件中心吗?
- javascript - 我单击一个按钮,但它没有执行应有的功能。我该如何解决?(镀铬扩展)
- r - Shiny R + Leaflet SearchInput 默认显示所有点
- angular - 过滤器不起作用:错误无法读取 null 的属性“toLowerCase”
- elasticsearch - 计算 ElasticSearch 索引中文档所在的页面
- python - Geopy Google v3 - 从 location.raw 中提取地址组件