数据结构与算法编程题29

news2024/11/23 23:49:46

先序遍历二叉树(非递归)栈

#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 1024

typedef 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 PreOrder_2(BiTree T)
{
	SqStack S;
	Init_Stack(S);
	BiTNode* p = T;
	while (p != NULL || Stack_Empty(S) != OK)
	{
		if (p != NULL)
		{
			cout << p->data << endl;
			Push(S, p);
			p = p->lchild;
		}
		else
		{
			Pop(S, p);
			p = p->rchild;
		}
	}
}
//---------------------------------核心代码---------------------------------//
//先序遍历二叉树(非递归)栈
//测试树1:ABC###D##
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);
	PreOrder_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 ? "      " : "|     ")));
	}
	//  "      " : "|     " 长度为 6
	str[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);
	}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BetaFlight模块设计之三十七:SBUS

BetaFlight模块设计之三十七&#xff1a;SBUS 1. 源由2. sbus启动&动态任务3. 主要函数3.1 sbus初始化3.2 sbusFrameStatus更新3.3 rxFrameTimeUs3.4 sbusDataReceive接收数据 4. 辅助函数4.1 sbusChannelsDecode 5. 参考资料 1. 源由 接着BetaFlight模块设计之三十六&…

西北大学计算机844考研-23年计网计算题详细解析

西北大学计算机844考研-23年计网计算题详细解析 1.计算无传输差错状态下停止—等待ARQ协议效率,电磁波传播速率为2*10^8m/s&#xff0c;链路长为2000m&#xff0c;帧长度为1000比特&#xff0c;计算传输速率10kbps及10Mbps时的协议效率&#xff08;即信道利用率&#xff09; …

医院绩效考核管理系统项目源码

医院绩效考核体系该如何完善 一、合理制定绩效指标 绩效指标是医院绩效考核体系的重要部分&#xff0c; 而医院各科室的工作方法和目的各不相同、职责也不同。因此&#xff0c;医院要重视绩效指标的制定&#xff0c;并且从实际出发&#xff0c;根据各科室情况合理制定个性化的…

Pytorch 基于 deeplabv3_resnet50 迁移训练自己的图像语义分割模型

一、图像语义分割 图像语义分割是计算机视觉领域的一项重要任务&#xff0c;旨在将图像中的每个像素分配到其所属的语义类别&#xff0c;从而实现对图像内容的细粒度理解。与目标检测不同&#xff0c;图像语义分割要求对图像中的每个像素进行分类&#xff0c;而不仅仅是确定物…

华夏ERP信息泄露漏漏洞复现 [附POC]

文章目录 华夏ERP信息泄露漏漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 华夏ERP信息泄露漏漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#x…

深思:C与C++相互调用问题

背景 上周&#xff0c;偶然看到同事愁眉苦脸的样子&#xff0c;便善意咨询了下发生了什么。简单沟通下&#xff0c;才知道他遇到了一个工程编译的问题&#xff0c;一直无法编译通过&#xff0c;困扰了他快一天时间。出于个人的求知欲和知识的渴望&#xff0c;我便主动与他一同分…

动态规划学习——等差子序列问题

目录 一&#xff0c;最长等差子序列 1.题目 2.题目接口 3.解题思路及其代码 二&#xff0c;等差序列的划分——子序列 1.题目 2.题目接口 3.解题思路及其代码 一&#xff0c;最长等差子序列 1.题目 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度…

M3u8视频文件怎么转换成MP4?一分钟解决!

大部分网课平台或者视频平台&#xff0c;都是基于m3u8格式的&#xff0c;这是因为m3u8格式本身的特点&#xff0c;既支持直播又支持点播。但是往往在其他平台或者设备上不兼容&#xff0c;就需要转成MP4格式&#xff0c;那么就像大家介绍3种好用的方法~ 方法一&#xff1a;使用…

详解HTTP协议(介绍--版本--工作过程--Fiddler 抓包显示--请求响应讲解)

目录 一.HTTP协议的介绍 1.1HTTP是什么&#xff1f; 1.2HTTP版本的演变 二.HTTP的工作过程 三.使用Fiddler抓包工具 3.1简单讲解Fiddler 3.2Fiddler工作的原理 3.3抓包结果分析 四.HTTP请求 4.1认识URL 4.2关于URL encode 4.3认识方法 4.3.1认识get和post 4.3.…

Fiddler弱网测试究竟该怎么做?

前言 使用Fiddler对手机App应用进行抓包&#xff0c;可以对App接口进行测试&#xff0c;也可以了解App传输中流量使用及请求响应情况&#xff0c;从而测试数据传输过程中流量使用的是否合理。 抓包过程&#xff1a; 1、Fiddler设置 1&#xff09;启动Fiddler->Tools->…

易点天下携AIGC创新成果KreadoAI亮相数贸会,解锁电商文化出海新可能

11月27日&#xff0c;第二届全球数字贸易博览会&#xff08;以下简称“数贸会”&#xff09;在浙江杭州完美落幕。作为出海营销领域最早一批布局AIGC战略的营销科技公司&#xff0c;易点天下受邀与来自全球800余家境内外数字贸易企业同台参展&#xff0c;并分享了旗下AIGC数字营…

拦截器使用详解

什么是拦截器? 拦截器是 Spring 框架提供的核⼼功能之⼀,主要⽤来拦截⽤户的请求, 在指定⽅法前后,根据业务需要执行预先设定的代码. 也就是说,允许开发⼈员提前预定义⼀些逻辑,在请求访问接口前/后执行.也可以在⽤户请求前阻止其进入接口执行 在拦截器当中&#xff0c;开发⼈…

广西铁塔发布ZETag定位服务,快递物流可视化将成趋势

在万亿的快递、物流红海市场中&#xff0c;可视化或将成为凸显差异化优势的一枚棋子。 11月17日&#xff0c;中国铁塔股份有限公司广西壮族自治区分公司&#xff08;以下简称“广西铁塔”&#xff09;在广西南宁召开“万物智联&#xff0c;贴‘芯’服务”物联网产品发布会&…

UE5富文本框学习(用途:A(名字)用刀(图片)击杀B(名字))

UE5-UMG教程-通用控件&#xff1a;多格式文本块&#xff08;RichTextBlock&#xff09;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Pu4y1k7Z2/?p54&spm_id_frompageDriver 结果示例&#xff1a; 1.添加富文本框 2.添加文字样式库 点添加&#xff0c;更改每行行…

又又又重新刷题的第一天第一天第一天,这次目标是top100一定要刷完整至少一次两次吧:1/150:两数之和 2/150两数相加 3/150无重复字符的最长字串

题目1/150&#xff1a;两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重…

智慧工厂人员定位系统源码,融合位置物联网、GIS可视化等技术,实现对人员、物资精确定位管理

智慧工厂人员定位系统源码&#xff0c;UWB高精度定位系统源码 随着中国经济发展进入新常态&#xff0c;在资源和环境约束不断强化的背景下&#xff0c;创新驱动传统制造向智能制造转型升级&#xff0c;越发成为企业生存发展的关键。智能工厂作为实现智能制造的重要载体&#xf…

电商平台为什么要使用CDN加速?

随着电商零售市场的成熟&#xff0c;消费者越来越关注购物体验。电商零售平台的响应速度、稳定性和安全性&#xff0c;均可能直接影响用户购买欲和用户转化率。如何进一步提升用户体验成为电商零售企业在市场决胜的关键。 阿里云全站加速DCDN全球覆盖3200节点&#xff0c;在提…

【知网稳定检索】2024年应用经济学,管理科学与社会发展国际学术会议(AEMSS 2024)

2024年应用经济学&#xff0c;管理科学与社会发展国际学术会议&#xff08;AEMSS 2024&#xff09; 2024 International Conference on Applied Economics, Management Science and Social Development 2024年应用经济学&#xff0c;管理科学与社会发展国际学术会议&#xff…

无公网IP下,如何实现公网远程访问MongoDB文件数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

即时电商需求快速爆发,商城系统平台的安全性如何保障?

双11的狂欢刚刚落下帷幕&#xff0c;留下的不仅是消费者的购物满足和品牌商家的销售增长&#xff0c;更让我们看到了一个行业变革的微妙暗示。 回溯这场全民购物的盛大节日&#xff0c;我们不难发现&#xff0c;线下零售品牌在电商巨浪的冲击下&#xff0c;非但没有萎靡&#x…