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;
}
相关推荐
Amo 67292 分钟前
取消网络请求
开发语言·前端·javascript
未来之窗软件服务6 分钟前
软件架构设计——通用表单UI—未来之窗行业应用跨平台架构
开发语言·javascript·ui
落下闳7 分钟前
数据结构——单向链表实现及循环链表
c语言·数据结构·vscode·链表
编程零零七8 分钟前
【Python】tensorflow中的argmax()函数
开发语言·python·信息可视化·数据分析·arm·python学习·python数据可视化
嘉琪00112 分钟前
js相关面试题
java·开发语言
robin_suli12 分钟前
动态规划子序列问题系列一>最长递增子序列的个数
数据结构·算法·动态规划
iiiiiankor16 分钟前
【C语言实现:用队列模拟栈与用栈模拟队列(LeetCode 225 & 232)】
c语言·开发语言·leetcode··队列
徐霞客32018 分钟前
C语言实现八大排序算法
数据结构·c++·算法·排序算法
精神病不行计算机不上班21 分钟前
[C++]纯虚函数与虚函数
开发语言·c++
oVo56733 分钟前
Rust 宏
开发语言·算法·rust