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;
}
相关推荐
@游子2 分钟前
Python类属性与魔术方法全解析
开发语言·python
WolfGang00732112 分钟前
代码随想录算法训练营Day50 | 拓扑排序、dijkstra(朴素版)
数据结构·算法
一直都在57229 分钟前
数据结构入门:二叉排序树的删除算法
数据结构·算法
hweiyu0032 分钟前
排序算法简介及分类
数据结构
眠りたいです43 分钟前
现代C++:C++11并发支持库
开发语言·c++·多线程·c++11·c++并发支持库
小灰灰搞电子1 小时前
Rust可以取代C++么?
开发语言·c++·rust
cat三三1 小时前
java之异常
java·开发语言
奇树谦1 小时前
【Qt实战】实现图片缩放、平移与像素级查看功能
开发语言·qt
我命由我123451 小时前
Python Flask 开发问题:ImportError: cannot import name ‘Markup‘ from ‘flask‘
开发语言·后端·python·学习·flask·学习方法·python3.11
wjs20241 小时前
Go 语言指针
开发语言