当前位置: 首页 > news >正文

【C++】二叉树和堆的链式结构

本篇博客给大家带来的是用C++语言来实现堆链式结构和二叉树的实现!

🐟🐟文章专栏:数据结构

🚀🚀若有问题评论区下讨论,我会及时回答

❤❤欢迎大家点赞、收藏、分享!

今日思想:你现在的懒惰将来你会买单的!

 上篇文章我们实现了二叉树的堆的顺序结构的实现具体内容请看这两篇文章:【C++】树和二叉树的实现(上)-CSDN博客

【C++】树和二叉树的实现(下)-CSDN博客 

接下来我们实现二叉树堆的链式结构 !

一、二叉树堆的链式结构的定义

        顺序结构实现堆的底层是数组,那么链式结构的底层是链表。我们先定义链表的结构体。

代码实例:

//Tree.h
//定义链式结构二叉树
typedef char BTDataType;
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

二、二叉树堆的链式结构的实现方法

        二叉树堆的链式结构的实现方法有: 前序遍历、中序遍历、后序遍历、二叉树结点个数、二叉树叶子结点个数、二叉树第k层结点个数、二叉树查找值为x的结点、二叉树的销毁、层序遍历、判断二叉树是否为完成二叉树。

注意:这些方法的实现大部分都是递归的思想,即使不知道递归也没事下面我会细说。

1、前序遍历

        前序遍历的规则:先遍历根,再遍历左子树、最后遍历右子树。

遍历顺序:A->B->D->NULL->NULL->NULL->C->E->NULL->NULL->F->N->ULL->NULL     

注:大家可以根据遍历顺序来理解前序遍历的规则。

代码实例:

//Tree.h
//前序遍历
void preOrder(BTNode* root);
//Tree.c
//前序遍历-根左右
void preOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	printf("%c ", root->data);
	preOrder(root->left);
	preOrder(root->right);
}

 短短的几行代码就完成了前序遍历,让我们看看它是怎么实现的,如图:

          其他的代码实现跟上图的注释一样就不多写了,包括后面实现的中序遍历、后序遍历等。

注:这张图不太清楚大家可以下载,然后在电脑自带的画图上放大就行。

 2、中序遍历

        中序遍历的规则:先遍历左子树,再遍历根结点、最后是右子树。

遍历顺序:NULL->D->NULL->B->NULL->A->NULL->E->NULL->C->NULL->F->NULL 

代码实例:

//Tree.h
//中序遍历
void InOrder(BTNode* root);
//Tree.c
//中序遍历——左根右
void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	postOrder(root->left);
	printf("%c ", root->data);
	postOrder(root->right);
}

3、后序遍历

        后序遍历的规则:先遍历左子树,再遍历右子树、最后遍历根结点。

遍历顺序:NULL->NULL->D->NULL->B->NULL->NULL->E->NULL->NULL->F->C->A 

代码实例:

//Tree.h
//后序遍历
void postOrder(BTNode* root);
//Tree.c
//后序遍历——左右根
void postOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	postOrder(root->left);
	postOrder(root->right);
	printf("%c ", root->data);
}

4、二叉树结点个数

        二叉树结点个数=根结点+左子树的结点个数+右子树结点个数

注:只有一个根结点。

代码实例:

//Tree.h
//二叉树结点个数
int BinaryTreesize(BTNode* root);
//Tree.c
//二叉树结点个数
int BinaryTreesize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	return 1 + BinaryTreesize(root->left) + BinaryTreesize(root->right);
}

 由于时间的原因后面的实现方法放到下篇文章!!

完!!

相关文章:

  • 阿里云 AI 搜索产品荣获 Elastic Innovation Award 2024
  • MySQL 调优
  • 线性规划的标准形式
  • openpnp - 如果安装面的钣金接触面不平,可以尝试加垫片
  • Springboot List集合的校验方式
  • 替代Qt中信号与槽的完整例子。
  • CVPR2025 | TAPT:用于视觉语言模型鲁棒推理的测试时对抗提示调整
  • 如何实现一个DNS
  • Java Web应用程序实现用户登录、学生信息管理和验证码验证以及页面跳转等基本功能(IDEA)含(Ajax、JSTL)
  • 【时时三省】(C语言基础)用gutchar函数输入一个字符
  • Session 、Cookies 和 Token关系于区别
  • k8s中的service解析
  • SAP HTTP接口获取文件应用
  • 医院人事科室病区管理系统基于Spring Boot-SSM
  • 点击劫持详细透析
  • 3D点云数据处理中的聚类算法总结
  • 【视频】H.264的码率和图像质量
  • docker利用ollama +Open WebGUI在本地搭建部署一套Deepseek-r1模型
  • 【UE5 PuerTS笔记】PuerTS安装
  • GetX 路由管理详解
  • 电子商务 独立网站/seo是什么seo怎么做
  • 网站在线建设/免费网站seo优化
  • 项目大全网/前端seo是什么意思
  • 潍坊做外贸网站建设/国内最新新闻热点事件
  • 泾川网站建设/营销方案怎么写模板
  • 秦皇岛做网站公司排名/深圳seo教程