数据结构--二叉树收尾

1.二叉树销毁

运用递归方法

分类:

根节点+左子树+右子树(一般都是这个思路,不断进行递归即可)

选择方法(分析):

前序:如果直接销毁根就无法找到左子树右子树

中序:也会导致丢失其他数据

因此需要选择后序(遇到根不销毁,先销毁左子树,左边销毁完再销毁右子树,最后销毁根)

复制代码
//二叉树销毁
void TreeDestory(BTNode* root);
{
	//首先判断是否为空
	if (root == NULL)
		return;
	TreeDestory(root->left);
	TreeDestory(root->right);
	//释放节点
	free(root);
}

2.层序遍历(一种BFS)

DFS:例如前中后序。

BFS:例如层序遍历

以根为起点然后一层一层向下走。

逻辑:上一层带下一层

层序都是用队列来进行辅助完成的。(属于队列的运用)

队列实现图:

出队头,空不进。

代码实现

1.依靠队列来完成因此首先需要将队列的头文件源文件实现添加进来

将其复制过来

粘贴进去就可。

注意:1.队列里边应该存节点还是存值?

首先不能存值如果只有值的话肯定通过一个数据无法找到其他数据

存节点又占用太大,因此可以存节点的指针

2.typedef后面不用BTNode*

如果用BTNode*,编译器不认识,因此需要用原类型,先这样理解就好

复制代码
//2.层序遍历 
#include"Queue.h"
void TreeLevelOrder(BTNode* root)
{
	Queue q;//定义一个队列
	QueueInit(&q);
	if (root)
		QueuePush(&q, root);
	while (!QueueEmpty(&q))//判空如果不是空的话就继续,
	{
		//先取对头数据
		BTNode* front = QueueFront(&q)
			QueuePop(&q);
		printf("%d", front->data);//打印出的是数字
		if (front->left)
			QueuePush(&q, front->left);
		if (front->right)
			QueuePush(&q, front->right);
	}
	QueueDestroy(&q);
}

注意:

之所以QueuePop(&q);后还可以 printf("%d", front->data);是因为Pop掉的是队列的头节点,但是树的依然存在不影响

已经传给front了,所以依然可以找到。

相关推荐
格林威2 分钟前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
codeの诱惑4 分钟前
推荐算法(一):数学基础回顾——勾股定理与欧氏距离
算法·机器学习·推荐算法
落樱弥城5 分钟前
Vulkan Compute 详解
算法·ai·图形学
老约家的可汗5 分钟前
list 容器详解:基本介绍与常见使用
c语言·数据结构·c++·list
Book思议-6 分钟前
【数据结构】字符串模式匹配:暴力算法与 KMP 算法实现与解析
数据结构·算法·kmp算法·bf算法
顶点多余12 分钟前
线程互斥+线程同步+生产消费模型
java·linux·开发语言·c++
Albert Edison14 分钟前
【ProtoBuf 语法详解】更新消息|保留字段|未知字段
开发语言·c++·protobuf
feifeigo12315 分钟前
近场声全息(NAH)数据与MATLAB实现
开发语言·matlab
fie888925 分钟前
基于MATLAB的非线性模型预测控制(NMPC)在CSRT系统中的应用
开发语言·matlab
⑩-26 分钟前
Java基础+集合框架-八股文
java·开发语言