111.【C语言】数据结构之二叉树的销毁函数

目录

1.知识回顾

2.分析

3.代码

后序遍历销毁(最简洁)

前序遍历销毁(不推荐)

中序遍历销毁(不推荐)

4.将函数嵌入main函数中执行


1.知识回顾

106.【C语言】数据结构之二叉树的三种递归遍历方式

2.分析

销毁二叉树需要按照一定的顺序去销毁,例如:先销毁根还是先销毁根对应的左右节点?这里有讲究

可以采用三种遍历的方法逐个销毁节点

3.代码

后序遍历销毁(最简洁)

后序遍历:按左子树-->右子树-->根的顺序遍历

cpp 复制代码
void TreeDestory(BTNode* root)
{
	if (root == NULL)
		return;
	TreeDestory(root->left);
	TreeDestory(root->right);
	free(root);
}

前序遍历销毁(不推荐)

前序遍历:按根-->左子树-->右子树的顺序遍历

销毁根节点前需要保存根节点指向的左右节点的地址

cpp 复制代码
void TreeDestory(BTNode* root)
{
	if (root == NULL)
		return;
	BTNode* left = root->left;
	BTNode* right = root->right;
	free(root);
	TreeDestory(left);
	TreeDestory(right);
}

中序遍历销毁(不推荐)

销毁根节点前需要保存根节点指向的右节点的地址

cpp 复制代码
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函数中执行

cpp 复制代码
int main()
{
    BTNode* root = CreateTree();
    TreeDestory(root);
    root = NULL;
    return 0;
}
相关推荐
weixin-a1530030831610 小时前
python-装饰器
开发语言·python
我的xiaodoujiao11 小时前
快速学习Python基础知识详细图文教程17--类型注解和断点调试
开发语言·python·学习·测试工具
wabs66612 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
leoZ23113 小时前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino
wuyk55513 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
程序员老陆13 小时前
Qt的QThread::usleep和FFmpeg的libavutil模块的av_usleep哪个精度高一些?
开发语言·qt·ffmpeg·音视频
2601_9638699514 小时前
【计算机毕业设计】基于Java的相框定制系统的设计与实现
java·开发语言·课程设计
lsylalalala14 小时前
常见的排序算法1
数据结构·算法·排序算法
名字还没想好☜14 小时前
Go 的 unsafe.Pointer 实战:零拷贝 []byte↔string 转换与三条铁律
开发语言·后端·golang·go·unsafe
wuminyu15 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++