求二叉树中度为1的结点个数

2023-11-09

内容:

若用二叉链表作为二叉树的存储表示,设计算法求二叉树中度为1的结点个数。

步骤:

1.算法分析

本题需要采用二叉链表作为二叉树的存储结构,来求解二叉树中度为1的结点个数。大体上分为两部分,第一,建立二叉树,此处采用先序的方式建立二叉树,其次需要用二叉链表来存储一棵二叉树,任意的二叉树中,每个结点最多有两个孩子,一个双亲结点,因此在一个结点中只需要包括数据域、左孩子和右孩子即可,当左孩子或右孩子不存在时,用符号#表示,声明二叉树的二叉链表结点的结构如下:

typedef struct  BiTNode{

TElemType data;

struct BiTNode *lchild,*rchild;//左右孩子指针

}BiTNode,*BiTree;

其次需要求出二叉树中度为1的结点个数,二叉树在结构上的特性为递归性,因此可以采用递归的方法实现。若某结点有左子树和右子树,则以此结点为根结点的根的二叉树中度为1的结点个数=左子树的度为1的结点个数+右子树度为1的结点个数,若该结点只有一棵子树,则以此结点为根的二叉树中度为1的结点个数=1+其子树中度为1的结点个数,若该结点没有子树,则此结点为根的二叉树中度为1的结点个数=0。

2.概要设计

使用C语言,其中设置了以下函数

 程序运行流程图如下:

3.测试

测试案例一:

ABC##DE##F##G##

其表示的二叉树形状为:

 

该二叉树中度为1的结点个数为0;

测试用例2:

ABD#G###CE##F##

其表示的二叉树形状为:

 

该二叉树中度为1的结点数目为2。

程序运行结果为:

测试案例一:

测试案例二:

 程序运行无误。

源码如下:

#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef char TElemType;
typedef int  Status;
//定义二叉树的二叉链表结点的结构
typedef struct  BiTNode{
	TElemType data;
	struct BiTNode *lchild,*rchild;//左右孩子指针 
}BiTNode,*BiTree;
//先序建立二叉树
void CreateBiTree(BiTree *T)
{
	char ch;
	ch=getchar();
	if(ch=='#')(*T)=NULL;//#代表空指针
	else
	{
		(*T)=(BiTree)malloc(sizeof(BiTNode));//申请结点
		(*T)->data=ch;//生成根结点
		CreateBiTree(&(*T)->lchild);//构造左子树
		CreateBiTree(&(*T)->rchild);//构造右子树 
	 } 
 } 
//求二叉树中度为1的结点个数
int Degree1(BiTree T){
	if(T==NULL)
	return 0;
	if((T->lchild==NULL&&T->rchild!=NULL)||(T->lchild!=NULL&&T->rchild==NULL)) 
	return Degree1(T->lchild)+Degree1(T->rchild)+1;
	else
		return Degree1(T->lchild)+Degree1(T->rchild);
} 
int main()
{
	BiTree T=NULL;
	printf("\n 创建一棵二叉树:\n");
	CreateBiTree(&T);//建立一棵二叉树T
	printf("\n 二叉树中度为1的结点个数为:%d\n",Degree1(T));
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

求二叉树中度为1的结点个数 的相关文章

  • 【融职培训】Web前端学习 第11章 微信开发5 微信支付

    一 概述 如果需要实现微信支付功能 需要有一个已认证的微信服务号 并且开通微信支付 开通后微信会提供一个商户ID 有了这个ID才能成功调用微信支付接口 开通微信支付后 需要在微信支付后台 产品中心 gt 开发配置 中配置 JSAPI支付授权
  • 不小心在服务器上删了文件怎么恢复出厂设置,文件删除了怎么恢复?这样才能彻底清除彻底清除...

    现在人换手机就像换衣服 虽然不是一天一换 但大多数人一年一换已经成为常态 所以闲置的旧手机也越来越多 一般旧手机大家都是闲置 或者二手转卖 或是送给别人使用 如此一来 旧手机上各种数据就需要彻底清除 否则旧手机上个人信息一旦泄露 很可能会给
  • HTML教程

    第一章 HTML标签 网页格式 html 网页的开始与结束 body 网页的主体部分 显示在网页中用户可以浏览到的内容 head 网页的头部 大部分不显示在用户浏览界面 meta 网页的摘要信息 不会显示在浏览器浏览界面 title 网页标
  • 人工智能-Tansformer-全套讲解15-20章

    第21章 基于Bayesian Theory的MRC文本理解基础经典模型算法详解 1 Bayesian prior在模型训练时候对Weight控制 训练速度影响等功能详解 2 Bayesian prior能够提供模型训练速度和质量的数学原理

随机推荐

  • angular指令心得(ng-model)

    angular指令心得 ng model 在项目中编写指令 常常会依赖其他的指令来实现想要达到的功能 其中最常用到的便是ng model 它为我们明确了需要绑定的属性 虽然在指令中可以通过通过使用独立作用域的 来进行双向绑定 但使用ng m
  • 华清远见学习笔记—Level1—Day1—必备Linux命令和C语言基础

    本专栏为个人在华清远见嵌入式linux学习期间的笔记 希望能与各位读者共同进步 文章目录 前言 一 环境安装 1 Linux文件系统是树形结构 弱分区 重文件 2 常用EXT4分区格式 3 基础分区 二 文件和目录相关命令 1 嵌入式开发基
  • Linux进程地址空间——上篇

    目录 一 前言 二 进程地址空间 1 通过一个例子去初步的了解进程地址空间 使用VS写了一段代码 在Linux中使用vim编辑器写类似的代码 结果解析 2 什么是进程地址空间 举个例子大家就明白了画饼的意义 如何画大饼 3 详谈进程地址空间
  • nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0

    运行springcloud项目出现如下报错 FactoryBean threw exception on object creation nested exception is java lang IllegalStateException
  • spring boot logback debug日志不输出问题

    logback配置如下
  • Redis集群一致Waiting for the cluster to join

    这是由于集群不仅要求开放连接端口 6379 还要开放集群总线端口 16379 在连接端口 10000
  • 威胁情报平台(多个平台查询)

    国内平台 微步威胁平台 微步在线X情报社区 威胁情报查询 威胁分析平台 开放社区 奇安信威胁情报中心 奇安信威胁情报中心 360威胁情报中心 https ti 360 cn 绿盟 威胁情报中心 https nti nsfocus com 新
  • 毕业设计-基于深度学习的轮胎缺陷无损检测

    目录 前言 课题背景和意义 实现技术思路 一 基于深度学习的目标检测技术及研究 二 基于主成分残差逆变换的轮胎 X 射线图像缺陷检测方法 三 基于独立成分分析的轮胎缺陷特征提取及分类方法的研究 四 深度卷积神经网络技术 实现效果图样例 最后
  • 数据库文档管理化开源项目工具SmartSQL

    数据库文档管理化开源项目工具SmartSQL 为何写该博文 由于这段时间需要理清软件的相关表结构 以及在客户端操作时使用 SQL Server Profiler 来检索一些简单的CURD sql语句 为了更好高效的理清内部的一些表结构 视图
  • react eslint解决方案整理

    eslint 解决方案整理 最近在处理react项目中报的warning 进行了以下整理 参考文档 http eslint cn docs rules 项目中遇到warning的解决 xxx is defined but never use
  • 使用EKF融合odometry及imu数据

    整理资料发现早前学习robot pose ekf的笔记 大抵是一些原理基础的东西加一些自己的理解 可能有不太正确的地方 当时做工程遇到的情况为机器人在一些如光滑的地面上打滑的情形 期望使用EKF利用imu对odom数据进行校正 就结果来看
  • python 点云配准_TEASER++:快速鲁棒的C++点云配准库

    TEASER fast certifiable 3D registration TEASER is a fast and certifiably robust point cloud registration library written
  • 在腾讯开发 QQ IM 的工作体验是怎样的?

    转载 http blog csdn net kobejayandy article details 8685271 目录 一 引言 二 个人网站 三 Oracle 支付宝 旺旺 四 淘宝技术发展 Java时代 脱胎换骨 五 淘宝技术发展 J
  • NIO:通道Channel讲解

    了解了缓冲区后 下来需要了解真正传输数据的通道Channel Channel是做什么用的 再来简单回顾一下 通道顾名思义就是传递的介质 Channel就类似于传统IO中的流 是直接对接操作系统的 当我们处理好缓冲区后 就可以通过缓冲区对通道
  • linux的程序安装失败,linux 安装软件各种错误集锦及解决方法

    1 最小化安装了centos 但是使用ifconfig命令时候出现 bash ifconfig command not found 解决方法 yum y install net tools x86 64 2 bash getenforce
  • 注册mysql到服务中

    前言 如果命令行输入net start mysql 提示 服务名无效 就表示你还没有将mysql注册到服务中去 因为net start 服务名 启动的是win下注册的服务 接下来的教程会手把手的教你如何将MySQL注册到win服务里面 注册
  • PostgreSQL jdbc 9.4 支持load balance 和 connection failover了

    Postgres2015全国用户大会将于11月20至21日在北京丽亭华苑酒店召开 本次大会嘉宾阵容强大 国内顶级PostgreSQL数据库专家将悉数到场 并特邀欧洲 俄罗斯 日本 美国等国家和地区的数据库方面专家助阵 Postgres XC
  • js使用theamleaf的值

  • Fn+F11/F12无法调整屏幕亮度的问题

    设备管理器看下监视器是否显示通用即插即用显示器 双击打开 位置显示 在 Intel UHD Graphics 上 右击开始菜单 设备管理器 监视器 双击 如果不是的话就是其他乱七八糟的远程软件 或者是什么鬼东西给显示器安装了个软件驱动方便它
  • 求二叉树中度为1的结点个数

    内容 若用二叉链表作为二叉树的存储表示 设计算法求二叉树中度为1的结点个数 步骤 1 算法分析 本题需要采用二叉链表作为二叉树的存储结构 来求解二叉树中度为1的结点个数 大体上分为两部分 第一 建立二叉树 此处采用先序的方式建立二叉树 其次