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;
}
相关推荐
懂得节能嘛.15 分钟前
【动态配置中心】Java+Redis构建动态配置中心
java·开发语言·redis
专注于大数据技术栈17 分钟前
Java中JDK、JRE、JVM概念
java·开发语言·jvm
雨落在了我的手上34 分钟前
C语言趣味小游戏----扫雷游戏
c语言·游戏
波诺波36 分钟前
通用装饰器示例
开发语言·python
沐知全栈开发36 分钟前
Maven POM 简介
开发语言
拾光Ծ39 分钟前
【C++高阶数据结构】红黑树
数据结构·算法
Qiuner1 小时前
《掰开揉碎讲编程-长篇》重生之哈希表易如放掌
数据结构·算法·leetcode·力扣·哈希算法·哈希·一文读懂
艾莉丝努力练剑1 小时前
【C++模版进阶】如何理解非类型模版参数、特化与分离编译?
linux·开发语言·数据结构·c++·stl
kaikaile19951 小时前
MATLAB实现自适应卡尔曼滤波(AKF)
开发语言·matlab
立志成为大牛的小牛1 小时前
数据结构——二十五、邻接矩阵(王道408)
开发语言·数据结构·c++·学习·程序人生