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;
}
相关推荐
Cx330❀7 分钟前
【数据结构初阶】--排序(四):归并排序
c语言·开发语言·数据结构·算法·排序算法
云间月131412 分钟前
飞算JavaAI智慧文旅场景实践:从景区管理到游客服务的全链路系统搭建
java·开发语言
杜子不疼.30 分钟前
《Python学习之使用标准库:从入门到实战》
开发语言·python·学习
意疏34 分钟前
【C语言篇】srand函数的详细用法解析
c语言·开发语言
艾莉丝努力练剑1 小时前
【C语言16天强化训练】从基础入门到进阶:Day 1
c语言·开发语言·数据结构·学习
颖川守一1 小时前
C++c6-类和对象-封装-设计案例2-点和圆的关系
开发语言·c++
番薯大佬1 小时前
编程算法实例-冒泡排序
数据结构·算法·排序算法
AI+程序员在路上1 小时前
单片机驱动LCD显示模块LM6029BCW
c语言·单片机·嵌入式硬件
·白小白1 小时前
力扣(LeetCode) ——100. 相同的树(C语言)
c语言·算法·leetcode
飞剑神1 小时前
qt svg缺失元素, 原因是不支持 rgba
开发语言·qt