二叉树的实现(纯C语言版)

目录

  • 1.实现的接口
    • 1.1通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
  • 1.2 二叉树销毁
    • 1.3二叉树节点个数
    • 1.4二叉树第k层节点个数
    • 1.5 二叉树查找值为x的节点
    • 1.6二叉树前序遍历
    • 1.7二叉树中序遍历
    • 1.8二叉树后序遍历
    • 1.9层序遍历
    • 1.10判断二叉树是否是完全二叉树
    • 1.11 二叉树叶子节点个数

1.实现的接口

1.1通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi);


if (a[*pi] == '#' || (*pi) >= n)
{(*pi)++;return NULL;
}
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
root->_data = a[*pi];
(*pi)++;
root->_left = BinaryTreeCreate(a, n, pi);
root->_right = BinaryTreeCreate(a, n, pi);
return root;

1.2 二叉树销毁

// 二叉树销毁
void BinaryTreeDestory(BTNode** root);

void BinaryTreeDestory(BTNode* root)
{if (root == NULL)return;BinaryTreeDestory(root->_left);BinaryTreeDestory(root->_right);free(root);
}

1.3二叉树节点个数

// 二叉树节点个数
int BinaryTreeSize(BTNode* root);


int BinaryTreeSize(BTNode* root)
{if (root == NULL)return 0;static size = 0;size++;BinaryTreeSize(root->_left);BinaryTreeSize(root->_right);return size;}

1.4二叉树第k层节点个数

// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k);


int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return 0;if (k == 1)return 1;return BinaryTreeLevelKSize(root->_left, k - 1) + BinaryTreeLevelKSize(root->_right, k - 1);}

1.5 二叉树查找值为x的节点

// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);

BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL)return NULL;if (root->_data == x)return root;BTNode* left = BinaryTreeFind(root->_left, x);if (left)return left;BTNode*right = BinaryTreeFind(root->_right, x);if (right)return right;
}

1.6二叉树前序遍历

// 二叉树前序遍历
void BinaryTreePrevOrder(BTNode* root);

void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL)return;printf("%c ", root->_data);BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);
}

1.7二叉树中序遍历

// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root);

void BinaryTreeInOrder(BTNode* root)
{BinaryTreeInOrder(root->_left);printf("%c ", root->_data);BinaryTreeInOrder(root->_right);}

1.8二叉树后序遍历

// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root);


void BinaryTreePostOrder(BTNode* root)
{BinaryTreePostOrder(root->_left);BinaryTreePostOrder(root->_right);printf("%c ", root->_data);
}

1.9层序遍历

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root);

void BinaryTreeLevelOrder(BTNode* root)
{Queue q;QueueInit(&q);if (root)QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* node=QueueFrontdata(&q);printf("%c ", node->_data);QueuePop(&q);if (node->_left){QueuePush(&q, node->_left);}if (node->_right){QueuePush(&q, node->_right);}}}

1.10判断二叉树是否是完全二叉树

// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root);


int BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);if (root)QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* tmp= QueueFrontdata(&q);QueuePop(&q);if (tmp == NULL)break;QueuePush(&q, tmp->_left);QueuePush(&q, tmp->_right);}while (!QueueEmpty(&q)){if (QueueFrontdata(&q) != NULL){QueueDestory(&q);return false;}QueuePop(&q);}QueueDestory(&q);return true;
}

1.11 二叉树叶子节点个数

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root);

int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL)return 0;if (root->_left == NULL && root->_right == NULL)return 1;return BinaryTreeLeafSize(root->_left)+ BinaryTreeLeafSize(root->_right);}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI:大语言模型训练方法 - 机器学习

Transformer Transformer是一种深度学习的模型架构,特别适用于自然语言处理任务。Transformer 模型的核心创新在于其 "自注意力"(Self-Attention)机制,这种机制使得模型可以有效地捕捉输入数据中的长距离依赖关系。 T…

【python】pip install 国内源

背景 python很多库都需要用国内镜像才能比较快,常用的有临时换源或长久换源。 临时换源 pip install [库] -i [源]国内源常用的有以下几种。 阿里云 http://mirrors.aliyun.com/pypi/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pyp…

数据结构 | 查漏补缺之DFS、BFS、二次探测再散列法、完全二叉树、深度计算

目录 DFS&BFS 哈希表-二次探测再散列法 完全二叉树&深度计算 排序 快速排序-挖坑法 插入、选择、冒泡、区别 DFS&BFS 哈希表-二次探测再散列法 完全二叉树&深度计算 排序 快速排序-挖坑法 插入、选择、冒泡、区别 插入从第一个元素开始&#xff0c…

利用yolov5输出提示框,segment-anything生成掩膜实现图像的自动标注

文章目录 一. 创建环境二. 下载模型文件三. 编辑代码 一. 创建环境 anaconda下新建一个环境 conda create -n yolo-sam python3.8激活新建的环境 conda activate yolo-sam更换conda镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/fre…

el-input-number设置step、stepStrictly后,数据精度丢失的问题

el-input-number的配置 <el-input-numberv-else-if"colInputType(column, row) number"v-model"row[column.key]":placeholder"${$t(documentation.pleaseInput)}":controls"false":min"minFn(column, row)":max"…

企业CIO为何选择SD-WAN技术进行组网?

在这个信息技术快速发展的时代&#xff0c;网络已经成为企业的中枢神经系统&#xff0c;它不仅连接了分布在全球各地的办公室和员工&#xff0c;还提供了无缝的数据交流和协作环境。随着企业规模的扩大和数字化转型的加速&#xff0c;企业需要高效、安全、可靠的网络连接来应对…

C++如何进行异常安全性处理和资源管理?

在C中&#xff0c;异常安全性处理和资源管理是确保程序在面对异常情况时能够正确处理资源的重要方面。下面是一些常见的方法和技术&#xff0c;可以帮助实现异常安全性和有效地管理资源&#xff1a; RAII&#xff08;资源获取即初始化&#xff09;&#xff1a;RAII是一种C编程技…

vsftpd.confg 常用配置,Beyond Compare 测试可用

vsftpd.confg 常用配置,备份一下, 经常配置好久 , 以后直接粘贴即可. Beyond Compare 测试可用. # Example config file /etc/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon m…

注册阿里云,免费领云服务器

注册阿里云&#xff0c;免费领云服务器&#xff0c;每月280元额度&#xff0c;3个月试用时长&#xff0c;可快速搭建网站/小程序&#xff0c;部署开发环境&#xff0c;开发多种企业应用&#xff0c;共3步骤即可免费领取阿里云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com…

Python与PHP:编写大型爬虫的适用性比较

目录 一、引言 二、Python编写爬虫的优势 1、强大的数据处理能力 2、丰富的网络库和框架 3、良好的可读性和易维护性 4、社区支持和生态系统 三、PHP编写爬虫的优势 1、简单易学 2、广泛的应用领域 3、高效的性能 4、灵活的请求处理方式 四、大型爬虫的编写实例&am…

Tauri魔法指南:从零开始开发一个桌面应用

摘要&#xff1a; 本文将以轻松幽默的笔调&#xff0c;带领读者探索如何使用Tauri这个前端魔法工具&#xff0c;从零开始开发一个跨平台的桌面应用。通过深刻的洞察和实际示例&#xff0c;让你轻松进入这个神奇的桌面开发领域。 引言 曾几何时&#xff0c;前端开发者们只是在…

springboot(ssmBBS论坛系统 论坛交流平台Java(codeLW)

springboot(ssmBBS论坛系统 论坛交流平台Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09;…

re:invent 2023 Amazon Q 初体验

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre&#xff0c;知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技在2023 re:Invent全球大会上宣布推出 Amazon…

计算机网络——数据链路层-差错检测(奇偶校验、循环冗余校验CRC)

目录 奇偶校验 循环冗余校验CRC 发送方操作 接收方操作 生成多项式 举例-1 举例-2 我们知道&#xff0c; 实际的通信链路都不是理想的&#xff0c;比特在传输过程中可能会产生差错&#xff1b;1可能变成0&#xff0c;而0也可能变成1&#xff0c;这称为比特差错。 如下…

[wordpiece]论文分析:Google’s Neural Machine Translation System

文章目录 一、论文解读1.1 模型介绍1.2 模型架构1.3 wordpiece 二、整体总结 论文&#xff1a;Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation 作者&#xff1a;Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V. Le,…

【图像拼接】论文精读:Quasi-Homography Warps in Image Stitching(QHW)

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

解决Unity打包Apk卡在calling IPostGenerateGradleAndroidProject callbacks

防盗镇楼 本文地址:https://superliii.blog.csdn.net/article/details/134820215 问题 好烦,又双叒卡BUG,在解决此问题的10多个小时里面鬼知道我经历了什么… 构建APK卡在calling IPostGenerateGradleAndroidProject callbacks 好不容易搜到个极其隐蔽的帖子,说删C:\Users\…

贵州乾辰谷材 以科技创新引领绝缘材料领域的新发展

贵州乾辰谷材科技有限公司&#xff0c;这家于2018年10月18日成立的贵州本地企业&#xff0c;已经在绝缘材料领域崭露头角。乾辰谷材不仅在成立短短几年内实现了快速成长&#xff0c;更以其科技创新能力和卓越产品性能赢得了业界和用户的广泛赞誉。 乾辰谷材的创始人王金斗先生&…

linux java后台启动的几种方式

1.使用 nohup 命令 可以使用 nohup 命令启动 Java 应用程序&#xff0c;使其在后台运行&#xff0c;这样即使退出终端或关闭 SSH 连接&#xff0c;Java 应用程序也能继续运行。nohup java -jar myapp.jar &2.使用 & 符号 使用 & 符号可以将 Java 应用程序放到后台…

软著项目推荐 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…