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

数据结构与算法编程题24

中序遍历非递归算法

#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 SqStack
{BiTNode* data[Maxsize];int top;
}SqStack;void Init_Stack(SqStack& S)
{S.top = -1;
}bool Stack_Empty(SqStack S)
{if (S.top == -1){cout << "堆栈为空!!!" << endl;return OK;}return ERROR;
}bool Push(SqStack& S, BiTNode* x)
{if (S.top == Maxsize - 1){cout << "堆栈已经满,无法继续推入数据!!!" << endl;return ERROR;}S.data[++S.top] = x;return OK;
}bool Pop(SqStack& S, BiTNode* &x)
{if (S.top == -1){cout << "堆栈为空,无法继续推出数据!!!" << endl;return ERROR;}x = S.data[S.top--];cout << "推出元素为: " << x << endl;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;}
}
//---------------------------------核心代码---------------------------------//
void InOrder_2(BiTree T)
{BiTNode* p = T;SqStack S;Init_Stack(S);while (p != NULL|| Stack_Empty(S)!=OK){if (p != NULL){Push(S, p);p = p->lchild;}else{Pop(S, p);cout << p->data<<endl;p = p->rchild;}}
}
//---------------------------------核心代码---------------------------------//
//中序遍历非递归算法
//AB#D##C##
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);InOrder_2(T);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);}
}

在这里插入图片描述

相关文章:

数据结构与算法编程题24

中序遍历非递归算法 #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; }B…...

springsecurity6配置四

一、springsecurity自定义过滤url配置 package com.school.information.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;import java.util.List;/*** 需要放行的…...

OpenCV简介及安装

前言 因为最近想做图像处理、人脸检测/识别之类的相关开发&#xff0c;所以就开始补OpenCV的相关知识&#xff0c;便开个专栏用于记录学习历程和在学习过程中遇到的一些值得注意的重点和坑。 学习过程基本上也是面向官方文档和Google。 简介 OpenCV(开源的计算机视觉库)是基于…...

Unity调用dll踩坑记

请用写一段代码&#xff0c;让unity无声无息的崩溃。 你说这怕是有点难哦&#xff0c;谁会这么不幸呢&#xff1f;不幸的是&#xff0c;我幸运的成为了那个不幸的人。 unity里面调用dll的方式是使用 DllImport &#xff0c;比如有一个 Hello.dll&#xff0c;里面有一个 char* …...

Oracle 数据库基线安全加固操作

目录 账号管理、认证授权 ELK-Oracle-01-01-01 ELK-Oracle-01-01-02 ​​​​​​​ELK-Oracle-01-01-03 ​​​​​​​ELK-Oracle-01-01-04 ​​​​​​​ELK-Oracle-01-01-05 ​​​​​​​ELK-Oracle-01-01-06 ​​​​​​​ ELK-Oracle-01-01-07 ​​​​​​​ …...

安装最新版WebStorm来开发JavaScript应用程序

安装最新版WebStorm来开发JavaScript应用程序 Install the Latest Version of JetBrains WebStorm to Develop JavaScript Applications By JacksonML 2023-11-25 1. 系统要求 WebStorm是个跨平台集成开发环境&#xff08;IDE&#xff09;。按照JetBrains官网对WebStorm软件…...

python opencv 放射变换和图像缩放-实现图像平移旋转缩放

python opencv 放射变换和图像缩放-实现图像平移旋转缩放 我们实现这次实验主要用到cv2.resize和cv2.warpAffine cv2.warpAffine主要是传入一个图像矩阵&#xff0c;一个M矩阵&#xff0c;输出一个dst结果矩阵&#xff0c;计算公式如下&#xff1a; cv2.resize则主要使用fx&…...

安装Anaconda、PyTorch(GPU版)库与PyCharm】

【Python深度学习&#xff1a;安装Anaconda、PyTorch&#xff08;GPU版&#xff09;库与PyCharm】https://www.bilibili.com/video/BV1cD4y1H7Tk?vd_source0aeb782d0b9c2e6b0e0cdea3e2121ebadownload.pytorch.org/whl/torchaudio/更改Jupyter Notebook的默认路径&#xff0c;亲…...

关于pytorch以及相关包的安装教程

一.查看自己电脑的配置 首先查看自己电脑的cuda的版本&#xff0c;WinR,敲入cmd打开终端 输入nvidia-smi&#xff0c;查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性&#xff0c;这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…...

AnalyticDB for PostgreSQL 实时数据仓库上手指南

AnalyticDB for PostgreSQL 实时数据仓库上手指南 2019-04-016601 版权 本文涉及的产品 云原生数据仓库 ADB PostgreSQL&#xff0c;4核16G 50GB 1个月 推荐场景&#xff1a; 构建的企业专属Chatbot 立即试用 简介&#xff1a; AnalyticDB for PostgreSQL 提供企业级数…...

【数据结构】堆(C语言)

今天我们来学习堆&#xff0c;它也是二叉树的一种&#xff08;我滴神树&#xff01;&#xff09; 目录 堆的介绍&#xff1a;堆的代码实现&#xff1a;堆的结构体创建&#xff1a;堆的初始化&#xff1a;堆的销毁&#xff1a;堆的push&#xff1a;堆的pop&#xff1a;判空 &am…...

使用 Raspberry Pi、Golang 和 HERE XYZ 制作实时地图

到目前为止&#xff0c;您可能已经看过我的一些与 Raspberry Pi 和位置数据相关的教程。我是这些小型物联网 (IoT) 设备的忠实粉丝&#xff0c;并编写了有关使用 Golang 进行 WLAN 定位 和 使用 Node.js 进行 GPS 定位的教程。 我想继续沿着 Golang 路线&#xff0c;做一个关于…...

贪吃蛇(c实现)(真的超级超级简单)

1.代码请看贪吃蛇c实现 王赫辰/c语言 - 码云 - 开源中国 (gitee.com) 2.本项目宗旨&#xff1a; 1.不引入复杂的库函数&#xff08;其他博主的全是陌生库函数看不懂&#xff1f;看我就对了&#xff01;◕‿◕&#xff09; 2.不使用c语法 &#xff08;都说了c实现&#xff0c;…...

linux 内存回收mglru算法代码注释2

mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru&#xff0c;可参考linux 内存回收代码注释&#xff08;未实现多代lru版本&#xff09;-CSDN博客 新的算法在引入4代lru的同时&#xff0c;还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…...

Exchange意外登录日志

最近在审计Exchange邮件系统的时候&#xff0c;发现大量用户半夜登录的日志。而且都是成功的&#xff0c;几乎没有失败的情况。其中Logon Type 8表示用户从网络登录。 Logon type 8: NetworkCleartext. A user logged on to this computer from the network. The user’s pas…...

NX二次开发UF_CURVE_ask_curve_turn_angle 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_turn_angle Defined in: uf_curve.h int UF_CURVE_ask_curve_turn_angle(tag_t curve, double orientation [ 3 ] , double * angle ) overview 概述 Returns …...

UE 进阶篇一:动画系统

导语: 下面的动画部分功能比较全,可以参考这种实现方式,根据自己项目的颗粒度选择部分功能参考,我们商业项目动画部分也是这么实现的。 最后实现的效果如下: 最终效果 目录: ------------------------------------------- 文末有视频教程/工程地址链接 -------------…...

超文本传输协议

超文本传输协议&#xff08;HypertextTransfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出&#xff1b;而消息内容…...

『heqingchun-Ubuntu系统+x86架构+编译安装ffmpeg+带有nvidia硬件加速』

Ubuntu系统x86架构编译安装ffmpeg带有nvidia硬件加速 一、准备文件 注&#xff1a;可直接下载我上传的CSDN资源&#xff0c;然后直接跳到"一"中的第"3"项"将文件按以下顺序存放"。 ffmpeg源码&#xff1a;音视频开发ffmpeg编译所需资源文件 其…...

UE5 UI教程学习笔记

参考资料&#xff1a;https://item.taobao.com/item.htm?spma21n57.1.0.0.2b4f523cAV5i43&id716635137219&ns1&abbucket15#detail 基础工程&#xff1a;https://download.csdn.net/download/qq_17523181/88559312 1. 介绍 工程素材 2. 创建Widget UE5 UI系统的…...

从CPU型号到安全特性:如何用CPUID指令的01H参数探测Intel处理器的隐藏能力

从CPU型号到安全特性&#xff1a;如何用CPUID指令的01H参数探测Intel处理器的隐藏能力 在开发高性能安全工具或虚拟化监控系统时&#xff0c;了解处理器的底层特性往往成为决定成败的关键。想象一下这样的场景&#xff1a;当你需要检测系统是否遭受高级控制流劫持攻击&#xff…...

Axure中文语言包:3分钟极速汉化指南,让原型设计更高效

Axure中文语言包&#xff1a;3分钟极速汉化指南&#xff0c;让原型设计更高效 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还…...

MTK Camera调试实战:Dump Buffer定位花屏与竖线问题

1. 初识MTK Camera Dump Buffer调试技巧 第一次遇到手机摄像头预览画面出现彩色条纹时&#xff0c;我盯着屏幕愣了半天。作为刚入行的Camera调试工程师&#xff0c;这种花屏问题简直就像天书。直到同事教我用了MTK平台的Dump Buffer功能&#xff0c;才发现原来这些看似复杂的图…...

DeckTape实战技巧:10个高效转换HTML演示文稿的秘诀

DeckTape实战技巧&#xff1a;10个高效转换HTML演示文稿的秘诀 【免费下载链接】decktape PDF exporter for HTML presentations 项目地址: https://gitcode.com/gh_mirrors/de/decktape DeckTape是一款强大的HTML演示文稿转PDF工具&#xff0c;能够帮助用户快速将各类在…...

EPLAN高手都在用的‘拖拽大法’:一个手势搞定符号库、项目打开和文件导入

EPLAN手势革命&#xff1a;用拖拽大法重构电气设计工作流 在智能手机普及的今天&#xff0c;我们早已习惯了用两根手指缩放照片、长按图标整理应用——这些手势操作让数字交互变得无比自然。但回到专业工程软件领域&#xff0c;多数人依然被困在层层菜单和右键选项中。EPLAN作为…...

用PaddlePaddle动态图复现ResNet50,从零搭建一个眼底病变分类器(附完整代码)

基于PaddlePaddle动态图的ResNet50眼底病变分类实战指南 在医疗影像分析领域&#xff0c;自动化的疾病筛查系统正逐渐成为临床医生的得力助手。眼底病变的早期发现对预防视力损伤至关重要&#xff0c;而深度学习技术为这一任务提供了新的可能性。本文将带领读者使用PaddlePadd…...

别再死记硬背Attention公式了!用Python+PyTorch手撕一个Hierarchical Attention Network(HAN)

从零实现层次注意力网络&#xff1a;用PyTorch构建可解释的文本分析模型 在自然语言处理领域&#xff0c;理解长文档的层次结构一直是个挑战。传统的注意力机制虽然强大&#xff0c;但面对嵌套的文本层级&#xff08;如词→句→段落&#xff09;时往往力不从心。这就是Hierarch…...

MATLAB三维散点图scatter3进阶指南:从数据可视化到科研绘图实战

1. 三维散点图基础与科研场景定位 第一次接触三维散点图时&#xff0c;我盯着屏幕上杂乱无章的数据点完全摸不着头脑。直到在流体力学实验中用scatter3可视化粒子运动轨迹&#xff0c;才真正理解这个工具的威力——它让抽象的数据瞬间有了立体感和方向性。不同于二维图表&#…...

从零搭建一个视频处理Demo:基于RKMEDIA的VENC/VDEC完整数据流(采集->编码->解码->显示)

从零搭建视频处理Demo&#xff1a;基于RKMEDIA的端到端数据流实战指南 当第一次接触瑞芯微平台的RKMEDIA框架时&#xff0c;很多开发者会被分散的模块和复杂的数据流搞得晕头转向。本文将带你从零开始&#xff0c;构建一个完整的"摄像头采集→编码存储→解码播放"视频…...

从HFSS到ADS:射频工程师的仿真工具箱里,2009版ADS到底该怎么用?

从HFSS到ADS&#xff1a;射频工程师的仿真工具箱深度解析 在射频设计领域&#xff0c;工程师们常常面临一个关键抉择&#xff1a;面对特定设计任务时&#xff0c;究竟该选择HFSS还是ADS&#xff1f;这个问题没有标准答案&#xff0c;却直接影响着设计效率与结果精度。本文将带你…...