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;
}
相关推荐
TechWJ16 分钟前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
lly20240639 分钟前
C++ 文件和流
开发语言
m0_706653231 小时前
分布式系统安全通信
开发语言·c++·算法
寻寻觅觅☆1 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx1 小时前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
zh_xuan2 小时前
kotlin lazy委托异常时执行流程
开发语言·kotlin
阿猿收手吧!2 小时前
【C++】string_view:高效字符串处理指南
开发语言·c++
不知名XL2 小时前
day50 单调栈
数据结构·算法·leetcode
玄同7652 小时前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
2401_858936883 小时前
【Linux C 编程】标准 IO 详解与实战:从基础接口到文件操作实战
linux·c语言