111.【C语言】数据结构之二叉树的销毁函数
销毁二叉树需要按照一定的顺序去销毁,例如:先销毁根还是先销毁根对应的左右节点?这里有讲究可以采用三种遍历的方法逐个销毁节点。
·
目录
1.知识回顾
2.分析
销毁二叉树需要按照一定的顺序去销毁,例如:先销毁根还是先销毁根对应的左右节点?这里有讲究
可以采用三种遍历的方法逐个销毁节点
3.代码
后序遍历销毁(最简洁)
后序遍历:按左子树-->右子树-->根的顺序遍历
void TreeDestory(BTNode* root)
{
if (root == NULL)
return;
TreeDestory(root->left);
TreeDestory(root->right);
free(root);
}
前序遍历销毁(不推荐)
前序遍历:按根-->左子树-->右子树的顺序遍历
销毁根节点前需要保存根节点指向的左右节点的地址
void TreeDestory(BTNode* root)
{
if (root == NULL)
return;
BTNode* left = root->left;
BTNode* right = root->right;
free(root);
TreeDestory(left);
TreeDestory(right);
}
中序遍历销毁(不推荐)
销毁根节点前需要保存根节点指向的右节点的地址
void TreeDestory(BTNode* root)
{
if (root == NULL)
return;
TreeDestory(root->left);
BTNode* right = root->right;
free(root);
TreeDestory(right);
}
注:三种方法在free()后均没有将指针置NULL,原因是root是一级指针,要想改变一级指针的值需要传递二级指针,可以在main函数中将指针手动置NULL
4.将函数嵌入main函数中执行
int main()
{
BTNode* root = CreateTree();
TreeDestory(root);
root = NULL;
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)