17121 求二叉树各种节点数

news/2024/9/28 21:23:16/

### 思路
1. 使用先序遍历的方式构造二叉树。
2. 使用递归函数 `CreateBiTree` 来构造二叉树。
3. 使用递归函数 `CountNodes` 来统计度为2、度为1和度为0的节点数。

### 伪代码
1. 定义二叉树节点结构 `BiTNode` 和二叉树指针 `BiTree`。
2. 定义 `CreateBiTree` 函数:
   - 读取一个字符。
   - 如果字符为 `#`,则当前节点为空。
   - 否则,创建一个新节点,并递归构造其左子树和右子树。
3. 定义 `CountNodes` 函数:
   - 如果当前节点为空,返回。
   - 如果当前节点有两个孩子,度为2的节点数加1。
   - 如果当前节点有一个孩子,度为1的节点数加1。
   - 如果当前节点没有孩子,度为0的节点数加1。
   - 递归统计左子树和右子树的节点数。
4. 在 `main` 函数中:
   - 调用 `CreateBiTree` 构造二叉树。
   - 调用 `CountNodes` 统计节点数。
   - 输出度为2、度为1和度为0的节点数。

### C++代码
 

#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK  1
#define ERROR  0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int  Status;typedef char  ElemType;
typedef struct BiTNode{ElemType data;struct BiTNode *lchild,*rchild; // 左右孩子指针
} BiTNode, *BiTree;Status CreateBiTree(BiTree &T) {char ch;scanf("%c", &ch);if (ch == '#') {T = NULL;} else {if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;T->data = ch; // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}return OK;
}void CountNodes(BiTree T, int &degree2, int &degree1, int &degree0) {if (T == NULL) return;if (T->lchild != NULL && T->rchild != NULL) {degree2++;} else if (T->lchild != NULL || T->rchild != NULL) {degree1++;} else {degree0++;}CountNodes(T->lchild, degree2, degree1, degree0);CountNodes(T->rchild, degree2, degree1, degree0);
}int main() {BiTree T;int degree2 = 0, degree1 = 0, degree0 = 0;CreateBiTree(T);CountNodes(T, degree2, degree1, degree0);printf("%d\n", degree2);printf("%d\n", degree1);printf("%d\n", degree0);return 0;
}


http://www.ppmy.cn/news/1530682.html

相关文章

【第二十二章:Sentosa_DSML社区版-扩展编程】

【第二十二章:Sentosa_DSML社区版-扩展编程】 扩展编程类算子是算子里支持sql语句编写及脚本编程,用户可以根据自己的需要在算子中编写自己需要执行的sql语句或者脚本对数据进行处理。扩展编程类算子数据算子流中的中间算子。 22.1 Sql 1.算子介绍 SQL…

【计网】从零开始学习http协议 --- http的请求与应答

如果你不能飞,那就跑; 如果跑不动,那就走; 实在走不了,那就爬。 无论做什么,你都要勇往直前。 --- 马丁路德金 --- 从零开始学习http协议 1 什么是http协议2 认识URL3 http的请求和应答3.1 服务端设计…

网络通信——DHCP

目录 一.DHCP应用场景 二.通信过程 三.DHCP报文 四.DHCP通信原理 (1)租借过程 (2)DHCP 租期更新 (3)DHCP重绑定 五.一般路由器的DHCP支持两种地址池 (1)接口地址池 &…

nlp大语言模型原理

NLP(自然语言处理)的主要任务可以分为以下几个方面‌: ‌词法分析(Lexical Analysis)‌:这是NLP的基础,包括分词(Tokenization)、词性标注(Part-of-Speech Ta…

IDEA自动清理类中未使用的import包

目录 1.建议清理包的理由 2.清理未使用包的方式 2.1 手动快捷键清理 2.2 设置自动清理 1.建议清理包的理由 有时候项目类文件中会有很多包被引入了,但是并没有被使用,这会增加项目的编译时间并且代码可读性也会变差。在开发过程中,建议设…

GPS在Linux下的使用(war driving的前置学习)

1.ls /dev/tty* 列出所有与 tty 相关的设备文件。这些设备文件通常对应终端设备 ttyUSB0是GPS端口 2.cat /dev/ttyUSB0 用于读取并显示连接到 /dev/ttyUSB0 串口设备发送的原始数据 这种是GPS定位不全的,要拿到更开阔的地方 这种是GPS定位全的 因为会持续输出…

JavaWeb——Vue组件库Element(1/6):快速入门(什么是Element,安装,引入ElementUI组件库,复制组件代码,启动项目 )

目录 什么是Element 快速入门 安装 引入ElementUI组件库 访问官网,复制组件代码 启动项目 小结 了解完前端的工程化之后,接下来了解一门新的前端技术:Vue 的组件库 Element。 学习完 Element 之后,即使作为一名 Java 后…

VulnHub-Narak靶机笔记

Narak靶机笔记 概述 Narak是一台Vulnhub的靶机,其中有简单的tftp和webdav的利用,以及motd文件的一些知识 靶机地址: https://pan.baidu.com/s/1PbPrGJQHxsvGYrAN1k1New?pwda7kv 提取码: a7kv 当然你也可以去Vulnhub官网下载 一、nmap扫…