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

数据结构-二叉树的遍历及相关应用

1、定义二叉树结点结构

2、编写主程序

3、三种方法遍历二叉树,并实现求树的深度,叶子数,某一层的结点数

4、实现代码(带交互界面)

#include<iostream>
using namespace std;
typedef struct BiTNode
{char data;struct BiTNode* lchild, * rchild;
}BiTNode, * BitTree;BitTree creatTree()
{BitTree T = NULL;char ch;cin >> ch;if (ch == '#'){T = NULL;return T;}else{T = new BiTNode;if (T == NULL)return NULL;T->data = ch;T->lchild = NULL;T->rchild = NULL;T->lchild = creatTree();T->rchild = creatTree();return T;}
}
void Zhongxu(BitTree T)
{if (T){Zhongxu(T->lchild);cout << T->data;Zhongxu(T->rchild);}
}
void Xianxu(BitTree T)
{if (T){cout << T->data;Xianxu(T->lchild);Xianxu(T->rchild);}
}
void Houxu(BitTree T)
{if (T){Houxu(T->lchild);Houxu(T->rchild);cout << T->data;}
}
void printmenu()
{cout << "欢迎使用二叉树遍历及相关应用工具\n";cout << "请输入功能选项(1-3):\n";cout << "\t1.创建二叉树\n";cout << "\t2.遍历二叉树\n";cout << "\t3.打印二叉树深度\n";cout << "\t4.打印二叉树叶子个数\n";cout << "\t5.打印二叉树第n层结点个数\n";cout << "\t0.退出\n";
}
int TreeDepth(BitTree T)
{if (T == NULL)return 0;elsereturn (TreeDepth(T->lchild) > TreeDepth(T->rchild) ? TreeDepth(T->lchild) : TreeDepth(T->rchild)) + 1;   //选择左孩子和右孩子中较大的深度,然后加上一个根结点
}
int LeafCount(BitTree T)
{if (T == NULL)return 0;else{if (T->lchild == NULL && T->rchild == NULL)   //如果递归到叶子,计数+1return 1;elsereturn LeafCount(T->lchild) + LeafCount(T->rchild);   //递归到叶子}
}
int NodeCount(BitTree T,int n)
{if (T == NULL)return 0;if (n == 1)  //如果到第n层,返回1return 1;return NodeCount(T->lchild, n - 1) + NodeCount(T->rchild, n - 1); //递归到第n层}int main()
{BitTree T = NULL;int choose;int method;choose = -1;while (choose != 0) {printmenu();cin >> choose;switch (choose) {case 1:cout << "创建你的二叉树吧,用#表示空指针:\n";T = creatTree();cout << "二叉树创建成功\n";break;case 2: {method = -1;while (method != 0){cout << "\t1.先序遍历\n";cout << "\t2.中序遍历\n";cout << "\t3.后序遍历\n";cout << "\t0.返回上一级\n";cout << "请输入功能选项(0-3)";cin >> method;switch (method){case 1:Xianxu(T); break;case 2:Zhongxu(T); break;case 3:Houxu(T); break;case 0:method = 0; break;}}printmenu();break;}case 3:cout << "该二叉树的深度是:" << TreeDepth(T)<<"\n"; break;case 4:cout << "该二叉树的叶子数是:" << LeafCount(T)<<"\n"; break;case 5:int n;cout << "请输入你要查询的层数:";cin >> n;cout << "该层共有" << NodeCount(T, n) << "个结点\n";break;case 0:cout << "感谢使用,欢迎多提宝贵意见!\n" << endl;return 0;}}}

相关文章:

数据结构-二叉树的遍历及相关应用

1、定义二叉树结点结构 2、编写主程序 3、三种方法遍历二叉树&#xff0c;并实现求树的深度&#xff0c;叶子数&#xff0c;某一层的结点数 4、实现代码&#xff08;带交互界面&#xff09; #include<iostream> using namespace std; typedef struct BiTNode {char d…...

机器人入门(五)—— 仿真环境中操作TurtleBot

仿真环境中操作TurtleBot 一、实操1.1 查看姿态信息1.2 控制turtlebot移动的三种方式1.2.1 命令行发布指令1.2.2 键盘操控1.2.3 Python脚本控制1.2.4 使用rqt工具界面&#xff0c;发布运动指令 二、里程计(odometry)TurtleBot3 仿真 进行实操之前&#xff0c;先准备环境 $ sud…...

G2406C是一款高效的直流-直流降压开关稳压器,能够提供高达1A输出电流。

G2406C 1.5MHz&#xff0c;1A高效降压DC-DC转换器 概述: G2406C是一款高效的直流-直流降压开关稳压器&#xff0c;能够提供高达1A输出电流。G2406C在2.7V至5.5V的宽范围输入电压下工作&#xff0c;使IC是低压电源转换的理想选择。在1.5MHz的固定频率下运行允许使用具有小电感…...

HTB——常见端口及协议总结

文章目录 一、 常见端口二、HTTP协议三、FTP四、SMB 一、 常见端口 http协议&#xff1a;80、8000https协议&#xff1a;443、8443ftp协议&#xff1a;20&#xff08;数据传输&#xff09;、21&#xff08;发送命令&#xff09;smb协议&#xff1a;445 二、HTTP协议 https的…...

Spring Boot中处理简单的事务

说到事务&#xff0c;我们第一影响应该是数据库管理系统的一个重要概念。 事务&#xff08;Transaction&#xff09;是数据库管理系统&#xff08;DBMS&#xff09;中的一个概念&#xff0c;用于管理对数据库的一组操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全…...

source activate my_env 和conda activate my_env 有什么区别

source activate my_env 和conda activate my_env 有什么区别 source activate 和 conda activate 是两个不同的命令&#xff0c;用于在Conda环境中激活特定的虚拟环境。它们的区别在于它们分别适用于不同版本的Conda。 source activate&#xff1a; source activate 是在Con…...

机器学习模型超参数优化最常用的5个工具包!

优化超参数始终是确保模型性能最佳的关键任务。通常&#xff0c;网格搜索、随机搜索和贝叶斯优化等技术是主要使用的方法。 今天分享几个常用于模型超参数优化的 Python 工具包&#xff0c;如下所示&#xff1a; scikit-learn&#xff1a;使用在指定参数值上进行的网格搜索或…...

出口美国操作要点汇总│走美国海运拼箱的注意事项│箱讯科技

01服务标准 美国的货物需要细致的服务&#xff0c;货物到港后的服务也是非常重要的。如果在货物到港15天内&#xff0c;如果没有报关行进行(PROCEED)&#xff0c;货物就会进入了G.O.仓库&#xff0c;G.O.仓库的收费标准是非常高的。 02代理资格审核 美国航线除了各家船公司&a…...

Gateway网关

Gateway网关 1、网关的位置与作用 官网&#xff1a;Spring Cloud Gateway Geteway是Zuul的替代&#xff0c; Zuul&#xff1a;路由和过滤Zuul最终还是会注册到Eureka Zuul网关采用同步阻塞模式不符合要求。 Spring Cloud Gateway基于Webflux&#xff0c;比较完美地支持异步…...

Python Opencv实践 - 车牌定位(纯练手,存在失败场景,可以继续优化)

使用传统的计算机视觉方法定位图像中的车牌&#xff0c;参考了部分网上的文章&#xff0c;实际定位效果对于我目前使用的网上的图片来说还可以。实测发现对于车身本身是蓝色、或是车牌本身上方有明显边缘的情况这类图片定位效果较差。纯练手项目&#xff0c;仅供参考。代码中im…...

U盘插在电脑上显示要格式化磁盘怎么办

U盘是一种便携式存储设备&#xff0c;广泛应用于各种场合。然而&#xff0c;有时候我们可能会遇到一些问题&#xff0c;比如将U盘插入电脑后显示要格式化磁盘&#xff0c;这通常意味着U盘的分区出现了问题或者U盘的文件系统已经损坏。这种情况下&#xff0c;我们应该如何解决呢…...

Python使用腾讯云SDK实现对象存储(上传文件、创建桶)

文章目录 1. 开通服务2. 创建存储桶3. 手动上传文件并查看4. python上传文件4.1 找到sdk文档4.2 初始化代码4.3 region获取4.4 secret_id和secret_key获取4.5 上传对象代码4.6 python实现上传文件 5 python创建桶 首先来到腾讯云官网 https://cloud.tencent.com/1. 开通服务 来…...

Springboot整合Jedis实现单机版或哨兵版可切换配置

Springboot整合Jedis实现单机版或哨兵版可切换配置 前言实现最后 前言 前文写到借助redis实现Shiro实现session限制登录数量踢人下线&#xff0c;本文就写一下Jedis的配置&#xff0c;可切换单机版和集群哨兵版&#xff0c;方便开发测试。 实现 很简单&#xff0c;直接上代码&…...

lenovo联想小新 Air-14 2019 AMD平台API版(81NJ)原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1HCC66EH4UOcgofRx5_v1oA?pwdlgqw 提取码&#xff1a;lgqw 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xf…...

特殊矩阵的压缩存储(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)

目录 1.数组的存储结构1.—维数组2.二维数组1.行优先存储2.列优先存储 2.特殊矩阵1.对称矩阵1.行优先存储 2.三角矩阵1.上三角矩阵2.下三角矩阵 3.三对角矩阵&#xff08;带状矩阵&#xff09;4.稀疏矩阵 1.数组的存储结构 1.—维数组 各数组元素大小相同&#xff0c;且物理上…...

DDU框架学习之路

目录 MVVM对比 DDU 数据消费者UI 数据的转换者&#xff1a;Domain Layer 数据图生产者/提供者 DataLayer 遵循原理&#xff1a; 单一数据流&#xff1a; Android官方推荐架构&#xff1a;DDU MVVM对比 M&#xff1a;Model 网络层 用于获取远端数据 VM:ViewModel 中间转…...

进阶课6——基于Seq2Seq的开放域生成型聊天机器人的设计和开发流程

情感聊天机器人通常属于开放领域&#xff0c;用户可以与机器人进行各种话题的互动。例如&#xff0c;微软小冰和早期的AnswerBus就是这种类型的聊天机器人。基于检索的开放领域聊天机器人需要大量的语料数据&#xff0c;其开发流程与基于任务型的聊天机器人相似&#xff0c;而基…...

Java面试题04

1.Array 和 ArrayList 有何区别&#xff1f; Array是固定长度的&#xff0c;元素类型可以是基本类型&#xff0c;创建后大小不可改变&#xff1b;ArrayList是可变长 度的&#xff0c;只能存储对象&#xff0c;可以动态添加和删除元素。 区别1&#xff1a; 存储类型不同 …...

海康Visionmaster-通讯管理:使用 Modbus TCP 通讯 协议与流程交互

使用 Modbus TCP 通讯协议与视觉通讯&#xff0c;当地址为 0000 的保持型寄存器(4x 寄存器)变为 1 时&#xff0c;触发视觉流程执行一次&#xff0c;同时视觉将地址为 0000 的寄存器复位&#xff08;也即写为 0&#xff09;&#xff0c;视觉流程执行完成后&#xff0c;将结果数…...

assimp中如何判断矩阵是否是单位矩阵

对于一个矩阵元素为浮点型的矩阵&#xff0c;你是否还在使每个元素跟1.0f或0.0f进行比较&#xff0c;如果这样&#xff0c;只能说你的结果不一定正确&#xff0c;那我们看看assimp中是如何做的。 template <typename TReal> AI_FORCE_INLINE bool aiMatrix4x4t<TReal…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...