909-2014-T2

文章目录

  • 1.原题
  • 2.算法思想
  • 3.关键代码
  • 4.完整代码
  • 5.运行结果

1.原题

二叉树采用二叉链表存储结构,设计算法,判断二叉树是否为满二叉树。叙述算法思想并给出算法实现。

2.算法思想

通过一次遍历,得到结点个数和树的高度。用结点个数和树的高度的关系来判断是否为满二叉树。

3.关键代码

/*** @struct treeNode* @brief 二叉树节点结构体。*/
struct treeNode {int data; /**< 节点中存储的数据 */struct treeNode *lchild; /**< 指向左子节点的指针 */struct treeNode *rchild; /**< 指向右子节点的指针 */
};/*** @brief 计算二叉树的高度** 递归计算二叉树的高度,并记录节点数。** @param root 二叉树根节点指针* @param n 指向节点数的指针,记录二叉树的节点数* @return int 二叉树高度*/
int treeHeight(struct treeNode *root, int *n) {// 若根节点为空,则高度为0if (root == NULL) {return 0;} else {// 递归计算左子树高度int leftTreeHeight = treeHeight(root->lchild, n);// 若左子树不为空,则节点数加1if (leftTreeHeight) {(*n)++;}// 递归计算右子树高度int rightTreeHeight = treeHeight(root->rchild, n);// 若右子树不为空,则节点数加1if (rightTreeHeight) {(*n)++;}// 返回左右子树中的最大高度并加上根节点的高度return (leftTreeHeight > rightTreeHeight ? leftTreeHeight : rightTreeHeight) + 1;}
}/*** @brief 判断二叉树是否为满二叉树** 验证二叉树是否为满二叉树,并输出节点数及高度信息。** @param root 二叉树根节点指针*/
void isTreeFull(struct treeNode *root) {// 若根节点为空,则是空树if (root == NULL) {printf("This is an empty tree.\n");return;}int n = 1;int height = treeHeight(root, &n); // 获取树的高度和节点数printf("number of the tree: %d\n", n); // 输出节点数printf("height of the tree: %d\n", height); // 输出树的高度// 判断是否为满二叉树if (n == ((int) pow(2, height) - 1)) {printf("This is a full tree.\n"); // 是满二叉树} else {printf("This is not a full tree.\n"); // 不是满二叉树}
}

4.完整代码

/*** @file main.c* @brief 实现了二叉树及其相关操作。*/#include <stdio.h>
#include <stdlib.h>
#include <tgmath.h>/*** @struct treeNode* @brief 二叉树节点结构体。*/
struct treeNode {int data; /**< 节点中存储的数据 */struct treeNode *lchild; /**< 指向左子节点的指针 */struct treeNode *rchild; /**< 指向右子节点的指针 */
};/*** @brief 计算二叉树的高度** 递归计算二叉树的高度,并记录节点数。** @param root 二叉树根节点指针* @param n 指向节点数的指针,记录二叉树的节点数* @return int 二叉树高度*/
int treeHeight(struct treeNode *root, int *n) {// 若根节点为空,则高度为0if (root == NULL) {return 0;} else {// 递归计算左子树高度int leftTreeHeight = treeHeight(root->lchild, n);// 若左子树不为空,则节点数加1if (leftTreeHeight) {(*n)++;}// 递归计算右子树高度int rightTreeHeight = treeHeight(root->rchild, n);// 若右子树不为空,则节点数加1if (rightTreeHeight) {(*n)++;}// 返回左右子树中的最大高度并加上根节点的高度return (leftTreeHeight > rightTreeHeight ? leftTreeHeight : rightTreeHeight) + 1;}
}/*** @brief 判断二叉树是否为满二叉树** 验证二叉树是否为满二叉树,并输出节点数及高度信息。** @param root 二叉树根节点指针*/
void isTreeFull(struct treeNode *root) {// 若根节点为空,则是空树if (root == NULL) {printf("This is an empty tree.\n");return;}int n = 1;int height = treeHeight(root, &n); // 获取树的高度和节点数printf("number of the tree: %d\n", n); // 输出节点数printf("height of the tree: %d\n", height); // 输出树的高度// 判断是否为满二叉树if (n == ((int) pow(2, height) - 1)) {printf("This is a full tree.\n"); // 是满二叉树} else {printf("This is not a full tree.\n"); // 不是满二叉树}
}/*** @brief 创建新节点。* @param data 节点数据。* @return 新节点指针。*/
struct treeNode *createNode(int data) {struct treeNode *newNode = (struct treeNode *) malloc(sizeof(struct treeNode));newNode->data = data;newNode->lchild = NULL;newNode->rchild = NULL;return newNode;
}/*** @brief 输出二叉树的括号表示法结构。* @param root 二叉树根节点指针。*/
void printTree(struct treeNode *root) {if (root == NULL) {return;}printf("(%d", root->data);if (root->lchild != NULL || root->rchild != NULL) {printf(" ");if (root->lchild == NULL) {printf("( )");} else {printTree(root->lchild);}printf(" ");if (root->rchild == NULL) {printf("( )");} else {printTree(root->rchild);}}printf(")");
}/*** @brief 主函数展示二叉树操作。* @return 程序退出状态。*/
int main() {struct treeNode *root = createNode(1); // 根节点为1root->lchild = createNode(2);root->rchild = createNode(3);root->lchild->lchild = createNode(4);root->lchild->rchild = createNode(5);root->rchild->lchild = createNode(6);root->rchild->rchild = createNode(7);printf("Binary Tree in Parenthesis Representation: ");printTree(root);printf("\n");isTreeFull(root);return 0;
}

5.运行结果

在这里插入图片描述

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

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

相关文章

C/C++ 实现:自然排序:针对两个需要排序的字符串,不仅逐个比较每个字符的顺序,对于连在一起的数字字符会作为一个完整数字进行比较 某知名企业的笔试题

目录 题目描述: 分析: 代码实现: 完整代码: 运行结果: 题目描述: 下面是一个自然排序函数的声明,请实现该函数; 自然排序是指:针对两个需要排序的字符串,不仅逐个比较每个

linux驱动开发.之spi测试工具spidev_test源码(一)

同i2c-tools工具类似&#xff0c;spidev_test是用来测试SPI BUS的用户态程序&#xff0c;其源码存在kernel目录下的tools下&#xff0c;具体为tools\spi\spidev_test.c。buildroot同样也提供名为spidev_test的package&#xff0c;可以直接进行编译&#xff0c;方便用户调试spi总…

Maven optional的作用

Maven optional的作用 这里的optional作用&#xff0c;可参考How do optional dependencies work?。 Project-A -> Project-BThe diagram above says that Project-A depends on Project-B. When A declares B as an optional dependency in its POM, this relationship …

Python-对象与json互转-json读写-文件读写

文章目录 1.json2.类对象序列化3.调用exe进行数据交换4.总结 1.json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999…

全国市政公用事业和邮政、电信业发展数据,shp/excel格式

随着城市化进程的加速和人们对城市生活品质要求的提高&#xff0c;市政公用事业和邮政、电信业发展越来越受到关注。 今天我们来分享全国市政公用事业和邮政、电信业发展数据&#xff0c;为读者呈现一个更加全面的行业发展图景。 首先了解下数据的基本信息&#xff0c;格式为s…

2023亿发数字化智能工单,专业管理工单处理全流程,助力企业转型腾飞

伴随着智能化和信息化的不断深入&#xff0c;企业数字化转型势如腾飞。在这个过程中&#xff0c;工单管理成为生产、家电、后勤等多个管理场景下频繁应用的关键环节。如何满足管理方对设备、服务等智能化管理的需求&#xff0c;提升工单管理效率、规范管理流程&#xff0c;并实…

nginx:413 Request Entity Too Large

修改配置文件 nginx.conf&#xff0c;根据自己的实际情况修改大小 http {client_max_body_size 10m; }配置完成后重启nginx 参考文章 解决 413 Request Entity Too Large&#xff08;请求实体太大&#xff09;

Fiddler模拟弱网环境

1.设置弱网&#xff1a;Rules-》Customize Rules 上传速度&#xff1a;1KB/300ms1KB/0.3s3.33KB/s 下载速度&#xff1a;1KB/150ms1KB/0.15s6.67KB/s 2.启动弱网&#xff1a;Rules-》Performance-》Simulate Modem Speeds 开启后&#xff0c;此项为勾选状态 3.验证弱网生效…

光量子计算再创融资高峰!法国 Quandela获投5000万欧元

​&#xff08;图片来源&#xff1a;网络&#xff09; 法国光量子计算公司Quandela致力于开发首台光量子计算机&#xff0c;目前已获得超过5,000万欧元的巨额融资。投资者包括通过“法国2030计划”获得的法国政府支持以及银行合作伙伴、个人。新的投资者包括法国投资公司Seren…

第十九章 绘图

目录 Java绘图类 Graphics 类 Graphics2D类 绘制图形 绘图颜色与画笔属性 设置颜色 设置画笔 绘制文本 设置字体 显示文字 显示图片 图像处理 放大与缩小 图像翻转 图像旋转 图像倾斜 Java绘图类 Graphics 类 Grapics 类是所有图形上…

Idea 2023.2.5配置(插件、Maven等)

IDEA2023.2.5配置 一. 插件Alibaba Java Coding Guidelines plugin supportMaven HelperMyBatisXSonarLintTranslationVuesion Theme 二. 自定义创建live template&#xff0c;快速写代码三. 修改全局配置3.1 Maven配置3.1.1 安装MavenStep1. 下载Step2. 安装Step3. 创建系统环…

NV080D语音芯片:让智能快递柜取件更便利

随着互联网的普及和电子商务的迅速发展&#xff0c;网购消费已经成为了越来越多人的选择。这也催生了一个庞大的“网购一族”&#xff0c;他们购买的各种商品会通过快递公司送到家门口。然而&#xff0c;收取快递往往也伴随着一系列问题。比如&#xff0c;派送时间和收件人取件…

全职RISC-V芯片D1开发板使用adb串口COM连接设备和文件上传下载

将两个USB端口都连接到工作电脑 推荐使用ADB工具访问开发板&#xff0c;下载连接如下&#xff1a; Windows版本&#xff1a;https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本&#xff1a;https://dl.google.com/android/repository/pla…

详解python淘宝秒杀抢购脚本程序实现

文章目录 前言一、官网下载火狐浏览器二、下载geckodriver&#xff0c;并解压到火狐浏览器文件夹根目录三、添加火狐浏览器根目录到系统环境变量四、下载并安装python及pycharm开发工具五、进入淘宝六、使用Pycharm运行脚本&#xff0c;新建python文件&#xff0c;将代码复制到…

MP3音频文件体积怎么缩小?压缩的方法有哪些?

压缩音频文件可减小文件的大小&#xff0c;从而更轻松地上传到其他平台&#xff0c;或轻松的通过电子邮件进行分享。除此之外&#xff0c;压缩音频文件还可以节省硬盘上的储存空间。那MP3音频文件体积怎么缩小呢&#xff1f;继续阅读可查看压缩的详细流程。 什么是音频文件压缩…

Jumpserver开启MFA认证,SecureCRT自动输入登录

1、JumpServer开启MFA认证 开启MFA认证&#xff1a; 开启后效果&#xff1a; 2、使用浏览器登录堡垒机&#xff0c;配置MFA 按需下载对应app进行绑定 到此手机绑定成功&#xff0c;登录时候可以在手机app查看动态码。 但是每次登录&#xff0c;都需要打开手机&#xff0c;…

BIO、NIO和AIO的区别

一、基础知识&#xff1a; I/O 模型的简单理解&#xff1a; 1.BIO&#xff08;Blocking I/O&#xff09;&#xff1a;同步阻塞&#xff0c;一个线程处理一个通道上的事件。 2.NIO&#xff08;Non-blocking I/O&#xff09;&#xff1a;同步非阻塞&#xff0c;使用选择器&…

RFID电网资产全寿命周期管理解决方案

一、方案背景 随着电网公司对电网资产全寿命周期管理的要求日益明确&#xff0c;许多电网公司已经开始积极推进存量资产PMS、PM与AM数据的联动对应&#xff0c;并将联动成果纳入资产全寿命周期管理一体化平台进行指标考核。然而&#xff0c;由于资产变动导致数据质量下降的问题…

数据库实验一 数据表的创建与修改管理

数据库实验一、数据表的创建与修改管理实验 一、实验目的二、设计性实验三、观察与思考 一、实验目的 (1) 掌握表的基础知识。 (2) 掌握使用SQL语句创建表的方法。 (3) 掌握表的修改、查看、删除等基本操作方法。 (4) 掌握表中完整性约束的定义。 (5) 掌握完整性约束的作用 二…

C#中集合和索引器

目录 一、集合 1.IEnumerable和IEnumerator接口 &#xff08;1&#xff09;示例&#xff1a;通过自定义集合存储商品信息 2.List和IList &#xff08;1&#xff09;示例1 &#xff08;2&#xff09;示例2 二、索引器 1.索引器与属性的区别 2.示例&#xff1a;通过索引…