数据结构与算法编程题35
用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。
#define _CRT_SECURE_NO_WARNINGS#include <iostream>
using namespace std;typedef char ElemType;
#define ERROR 0
#define OK 1
#define Maxsize 100
#define STR_SIZE 1024typedef struct BiTNode
{ElemType data;BiTNode* lchild, * rchild;
}BiTNode, * BiTree;void draw(BiTNode* root);//-------------------------队列操作---------------------------//
typedef struct Queue
{BiTNode* data[Maxsize];int front;int rear;
}Queue;void Init_Queue(Queue& Q)
{Q.front = Q.rear = 0;
}bool Empty_Queue(Queue& Q)
{if (Q.front == Q.rear){cout << "队列为空" << endl;;return OK;}return ERROR;
}bool Enter_Queue(Queue& Q, BiTNode* x)
{if ((Q.rear + 1) % Maxsize == Q.front){cout << "队列已满,无法继续入队!!!" << endl;return ERROR;}Q.data[Q.rear] = x;Q.rear = (Q.rear + 1) % Maxsize;return OK;
}bool Leave_Queue(Queue& Q, BiTNode*& x)
{if (Q.rear == Q.front){cout << "队列为空,无法出队!!!" << endl;return ERROR;}x = Q.data[Q.front];cout << "出队元素为:" << x->data << endl;//Q.front = (Q.front + 1) % Maxsize;return OK;
}
//-------------------------队列操作---------------------------//bool Create_tree(BiTree& T) //递归创建二叉树
{ElemType x = 0;cin >> x;if (x == '#'){T = NULL;}else{T = (BiTree)malloc(sizeof(BiTNode));if (T == NULL){cout << "内存无法分配!!!" << endl;return ERROR;}T->data = x;T->lchild = NULL;T->rchild = NULL;Create_tree(T->lchild);Create_tree(T->rchild);}return OK;
}void PreOrder(BiTree T)   //前序遍历非递归
{if (T != NULL){cout << T->data;PreOrder(T->lchild);PreOrder(T->rchild);}
}void InOrder(BiTree T)    //中序遍历非递归
{if (T != NULL){InOrder(T->lchild);cout << T->data;InOrder(T->rchild);}
}void PostOrder(BiTree T)  //后序遍历非递归
{if (T != NULL){PostOrder(T->lchild);PostOrder(T->rchild);cout << T->data;}
}//---------------------------------核心代码---------------------------------//
//主要思想:层次遍历
int	one_du_count(BiTree T)
{int count = 0;if (T == NULL){cout << "树为空" << endl;return 0;}if (T->lchild == NULL && T->rchild == NULL){cout << "树中只有一个结点" << endl;return 0;}BiTNode* p = T;Queue Q;Init_Queue(Q);Enter_Queue(Q, p);while (Empty_Queue(Q) != OK){Leave_Queue(Q,p);if (p->lchild != NULL){Enter_Queue(Q, p->lchild);}if (p->rchild != NULL){Enter_Queue(Q, p->rchild);}if ( (p->lchild != NULL &&p->rchild==NULL)||(p->lchild==NULL&&p->rchild!=NULL) ){count++;}}return count;
}
//---------------------------------核心代码---------------------------------//
//用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。
//测试树1:012###3##
//测试树1:012###34###
int main(void)
{cout << "//------生成一颗树---------//" << endl;BiTree T = NULL;Create_tree(T);PreOrder(T);cout << endl;InOrder(T);cout << endl;PostOrder(T);cout << endl;cout << "//------生成一颗树---------//" << endl;cout << "//------原始树图形---------//" << endl;draw(T);cout << "树中度为1的结点个数为: " << one_du_count(T) << endl;return 0;
}//参考博客:https://blog.csdn.net/weixin_42109012/article/details/92250160
/*****************************************************************************
* @date   2020/4/19
* @brief  水平画树
* @param  node	二叉树节点
* @param  left	判断左右
* @param  str 	可变字符串
*****************************************************************************/
void draw_level(BiTNode* node, bool left, char* str) {if (node->rchild) {draw_level(node->rchild, false, strcat(str, (left ? "|     " : "      ")));}printf("%s", str);printf("%c", (left ? '\\' : '/'));printf("-----");printf("%c\n", node->data);if (node->lchild) {draw_level(node->lchild, true, strcat(str, (left ? "      " : "|     ")));}//  "      " : "|     " 长度为 6str[strlen(str) - 6] = '\0';
}/*****************************************************************************
* @date   2020/4/19
* @brief  根节点画树
* @param  root	二叉树根节点
*****************************************************************************/
void draw(BiTNode* root) {char str[STR_SIZE];memset(str, '\0', STR_SIZE);/*** 1. 在 windows 下,下面是可执行的* 2. 在 Linux   下,执行会报 Segmentation fault*      需要使用中间变量*/if (root->rchild) {draw_level(root->rchild, false, str);}printf("%c\n", root->data);if (root->lchild) {draw_level(root->lchild, true, str);}
}


相关文章:
 
数据结构与算法编程题35
用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct B…...
每日一题 - 231201 - Divisibility by Eight
Divisibility by Eight TAG - 整除特性、枚举 整除特性、枚举 整除特性、枚举时间复杂度 - O ( N 3 ) O(N^3) O(N3) // #include<bits/stdc.h> using namespace std; // #define int long long void solve() {string s;cin>>s;for( int i0;i<s.size();i )if(…...
 
虚幻学习笔记1—给UI添加动画
一、前言 本文所使用的虚幻版本为5.3.2,之前工作都是用unity,做这类效果用的最多的是一个DoTween的插件,在虚幻中都内置集成了这这种效果制作。 图1.1 UI动画 二、过程 1、首先,在诸如按钮、图像等可交互控件中选中,如…...
 
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
目录 1.初识MQ 1.1.同步和异步通讯 1.1.1.同步通讯 1.1.2.异步通讯 1.2.技术对比: 2.快速入门 2.1.安装RabbitMQ 2.2.RabbitMQ消息模型 2.3.导入Demo工程 2.4.入门案例 2.4.1.publisher实现 2.4.2.consumer实现 2.5.总结 3.SpringAMQP 3.1.Basic Que…...
 
JAVEE初阶 多线程基础(四)
线程安全 一.线程安全存在的问题二.锁三.关于锁的理解四.关于锁操作混淆的理解4.1两个线程是否对同一对象加锁 一.线程安全存在的问题 为什么这里的count不是一百万呢?这就是线程所存在的不安全的问题,由于线程是抢占式执行,同时执行count,操作本质是三个指令 1.load 读取内存…...
【C 语言经典100例】C 练习实例19
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如61+2+3.编程找出1000以内的所有完数。 程序分析:请参照:C 练习实例14。 #include<stdio.h> #define N 1000 int main() {…...
 
Jmeter+Maven+jenkins+eclipse搭建自动化测试平台
背景: 首先用jmeter录制或者书写性能测试的脚本,用maven添加相关依赖,把性能测试的代码提交到github,在jenkins配置git下载性能测试的代码,配置运行脚本和测试报告,配置运行失败自动发邮件通知,…...
 
springboot+jsp+java人才招聘网站4f21r
本基于springboot的人才招聘网站主要满足3种类型用户的需求,这3种类型用户分别为求职者、企业和管理员,他们分别实现的功能如下。 (1)求职者进入网站后可查看职位信息、企业信息以及职位新闻等,注册登录后可实现申请职…...
 
WordPress:构建强大的网站和博客的完美选择
WordPress:构建强大的网站和博客的完美选择 一、WordPress 简介1.1 WordPress 介绍1.2 WordPress 优势 二、部署LNMP环境2.1 前提条件2.2 关闭防火墙和SELinux2.3 安装Nginx2.4 安装MySQL2.5 安装PHP2.6 配置Nginx2.7 配置MySQL2.8 配置PHP2.9 测试访问LNMP平台 三、…...
 
2021年8月18日 Go生态洞察:整合Go的网络体验
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
 
【算法】缓存淘汰算法
目录 1.概述2.代码实现2.1.FIFO2.2.LRU2.3.LFU2.4.Clock2.5.Random 3.应用 1.概述 缓存淘汰策略是指在缓存容量有限的情况下,当缓存空间不足时决定哪些缓存项应当被移除的策略。缓存淘汰策略的目标是尽可能地保持缓存命中率高,同时合理地利用有限的缓存…...
接手项目要做的事项
总结:在接手别人的项目时,至少应该自己整理并绘画四个图 1、产品脑图:帮助你理解产品的功能; 2、UML时序图:帮助你源代码的核心技术实现; 3、整体业务泳道图:帮助你从整体上熟悉业务的流程&a…...
 
【Web】攻防世界Web_php_wrong_nginx_config
这题考察了绕过登录、目录浏览、后门利用 进来先是一个登录框,随便怎么输前端都直接弹窗 禁用js后再输入后登录 查看源码,好家伙,不管输什么都进不去 直接扫目录 访问/robots.txt 访问/hint.php 访问/Hack.php 抓包看一下 cookie里isLogin0…...
Flume采集Kafka并把数据sink到OSS
安装环境 Java环境, 略 (Flume依赖Java)Flume下载, 略Scala环境, 略 (Kafka依赖Scala)Kafak下载, 略Hadoop下载, 略 (不需要启动, 写OSS依赖) 配置Hadoop 下载JindoSDK(连接OSS依赖), 下载地址Github 解压后配置环境变量 export JINDOSDK_HOME/usr/lib/jindosdk-x.x.x expo…...
 
flutter,uni-app开发调试ios
一、申请ios开发者账号 二、ios开发者配置 ios 开发者需要配置的地方 https://developer.apple.com/account/resources/certificates/list Certificates(证书): 作用: 证书用于对应用程序和开发者进行身份验证,确保安全性和可…...
MybatisBatchUtils功能介绍
MybatisBatchUtils 是一个 MyBatis 框架的工具类,主要用于简化 MyBatis 中批量操作的代码编写。该工具类封装了 MyBatis 中的批量操作方法,可以方便地进行批量插入、更新和删除等操作。 一般来说,使用 MyBatis 进行批量操作需要先设置 JDBC 驱…...
 
Flutter使用flutter_gen管理资源文件
pub地址: https://pub.dev/packages/flutter_gen 1.添加依赖 在你的pubspec.yaml文件中添加flutter_gen作为开发依赖 dependencies:build_runner:flutter_gen_runner: 2.配置pubspec.yaml 在pubspec.yaml文件中,配置flutter_gen的参数。指定输出路…...
 
vue3 setup语法糖,常用的几个:defineProps、defineEmits、defineExpose、
vue3和vue2组件之间传参的不同 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。 <script setup> 中的代码会在每次组件实例被创建的时候执行。 任何在 <script setup> 声明的顶层的绑定 (包括变量,函数声明࿰…...
JC/T 2087-2011建筑装饰用仿自然面艺术石检测
建筑装饰用仿自然面艺术石是指以硅酸盐水泥、轻质骨料为主要原料经浇筑成型的饰面装饰材料。 JC/T 2087-2011建筑装饰用仿自然面艺术石测试: 测试项目 测试方法 外观质量 GB/T 18601 尺寸偏差 GB/T 18601 体积密度 GB/T 9966.3 吸水率 GB/T 9966.3 压缩强…...
 
C语言——写一个简单函数,找两个数中最大者
#include <stdio.h>int max( int a, int b ) { return a>b ? a:b; }int main() { int a, b;printf("输入两个数:\n");scanf("%d %d", &a, &b);printf("max %d\n", max(a, b));return 0; }输出结果:...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
 
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
 
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
 
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
 
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
 
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
 
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
