王道p149 3.编写后序遍历二叉树的非递归算法(c语言代码实现)

news2024/9/25 1:15:46

本题代码如下

void postorder(tree* t)
{
	struct treenode* stack[100];//初始化结构体数组
	int top = -1;//让栈顶指向-1
	treenode* p = *t;
	while (p || top != -1)//p不为空,并且栈不为空
	{
		if (p)
		{
			top++;//p不为空,将p压入栈中
			stack[top] = p;
			p = p->lchild;//一直向左下遍历
		}
		else
		{
			p = stack[top];//p等于栈顶元素
			if (p->rchild && p->rchild->tag == 0)//右孩子不为空且未被访问过
				p = p->rchild;
			else//否则弹出结点并访问
			{
				p = stack[top];
				top--;
				printf("%c", p->data);
				p->tag = 1;//标记p被访问过
				p = NULL;
			}
		}
	}
}

完整测试代码

#include<stdio.h>
#include<stdlib.h>
typedef struct treenode
{
	char data;
	struct treenode* lchild, * rchild;
	int tag;
}treenode,*tree;
void buildtree(tree *t)
{
	char ch;
	ch = getchar();
	if (ch == '#')
		*t = NULL;
	else
	{
		*t = (treenode*)malloc(sizeof(treenode));
		(*t)->data = ch;
		(*t)->tag = 0;
		(*t)->lchild = NULL;
		(*t)->rchild = NULL;
		buildtree(&(*t)->lchild);
		buildtree(&(*t)->rchild);
	}
}
void postorder(tree* t)
{
	struct treenode* stack[100];//初始化结构体数组
	int top = -1;//让栈顶指向-1
	treenode* p = *t;
	while (p || top != -1)//p不为空,并且栈不为空
	{
		if (p)
		{
			top++;//p不为空,将p压入栈中
			stack[top] = p;
			p = p->lchild;//一直向左下遍历
		}
		else
		{
			p = stack[top];//p等于栈顶元素
			if (p->rchild && p->rchild->tag == 0)//右孩子不为空且未被访问过
				p = p->rchild;
			else//否则弹出结点并访问
			{
				p = stack[top];
				top--;
				printf("%c", p->data);
				p->tag = 1;//标记p被访问过
				p = NULL;
			}
		}
	}
}
int main()
{
	tree t;
	buildtree(&t);
	postorder(&t);
	return 0;
}

用ABD##E##CF##G##

/*        A
    B        C
D      E   F     G    
*/

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

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

相关文章

thinkphp6项目使用多应用开发

使用composer安装项目&#xff0c;命令&#xff1a;composer create-project topthink/think thinkphp6使用多应用开发&#xff0c;安装多应用扩展&#xff0c;命令&#xff1a;composer require topthink/think-multi-app安装多应用扩展成功后&#xff0c;删除app/controller文…

编译报错 internal compiler error: Segmentation fault 解决方法

问题描述 最近在使用虚拟机 ubuntu 20.04 编译 musl gcc 工具链时&#xff0c;遇到一个奇怪的问题&#xff0c;编译过程中异常退出&#xff0c;清理了多次重新编译&#xff0c;发现编译报错提示的信息是 internal compiler error: Segmentation fault 由于之前是可以正常编译的…

java 接口返回乱码 接口中文返回乱码 请求接口返回\u5317\u4eac乱码 okhttp请求返回中文乱码

1. 对接第三方请求&#xff0c;返回参数中文乱码&#xff0c;如下图所示。 2. 原因&#xff1a;中文被unicode编码导致。okhttp设置返回编码格式也不生效&#xff1a; // String result new String(response.body().bytes(), "utf-8");3. 解决方案&…

JS三种常见的存储机制

1.localStorage localStorage是HTML5引入的一种持久化存储机制&#xff0c;用于在浏览器中长期保存数据。localStorage中存储的数据没有过期时间&#xff0c;除非被显式清除或代码删除。存储在localStorage中的数据对于同一个域名下的所有页面都是共享的。localStorage可以存储…

香港优才计划线上申请官网入口地址在此,附自己申请攻略!

香港优才计划线上申请官网入口地址在此&#xff0c;附自己申请攻略&#xff01; 2023年4月份开始&#xff0c;香港入境处调整了优才计划申请方式。申请人须使用电子化服务递交有关申请&#xff0c;也就是线上申请&#xff01;入境处不再接受亲身递交、以邮递或投递方式递交的有…

腾讯云抱歉不满足产品首购条件解决方法

购买腾讯云服务器提示“抱歉&#xff0c;检测到相同实名认证主体已购买&#xff0c;不满足产品首购条件&#xff0c;您可了解其他商品。”&#xff0c;购买腾讯云特价云服务器是有新用户首购限制的&#xff0c;说当前腾讯云认证主体的其他账号已经购买过云服务器&#xff0c;一…

WAS项目更新单个文件

WAS项目更新单个文件 websphere替换单个文件时&#xff0c;相对路径是ear目录作为根路径 ‍ ‍ 比如要替换zjyct_testgkjz.jsp,路径只要填写BocGkjzWeb.war/zjyct_testgkjz.jsp&#xff0c;如果填写绝对路径&#xff0c;将造成如上图find出来的第一条所示结果问题 ‍

什么是有效种草!900万播放成B站“网红品牌”

- 导语 众所周知&#xff0c;B站早期是二次元小众社区&#xff0c;所以ACG&#xff08;动画、漫画、游戏三者的合称&#xff09;内容一直是B站的核心品类&#xff0c;B站经过多品类内容的摸索和发展&#xff0c;一直到现在成为年轻一代聚集的多元化社区&#xff0c;但ACG内容仍…

C++宏的作用

四种预编译命令:头文件包含&#xff0c;条件编译&#xff0c;宏替换和布局控制。 1.头文件包含 #include 文件分别用两种形式包含&#xff0c;一种将文件用“”包含&#xff0c;另一种用<>包含。 两种包含方式的不同之处在于&#xff0c;它们的查找策略不同。 #incl…

【递归、搜索与回溯算法】第五节.129. 求根节点到叶节点数字之和和814. 二叉树剪枝

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;递归、搜索与回溯算法 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&am…

基于Java的医药进销存管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

CMake 坑之添加文件后不修改CMakeList.txt,则文件加不进来

问题&#xff1a; 我在一个文件夹中加了一个.h和对应的cpp。 这里.h中的类会被导出。 但是怎么都导不出来。 我试了无数次的 clean and rebuild 都没用。 分析&#xff1a; 做了很多实验。发现是新建的文件没有被读取进来。 解决方法&#xff1a; 改进了下对应的CMakeL…

嵌入式软件工程师面试题——2025校招专题(三)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…

Ubuntu 安装 docker-compose

在Ubuntu上安装Docker Compose&#xff0c;可以按照以下步骤进行操作&#xff1a; 下载 Docker Compose 二进制文件 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker…

【static + 代码块+toString打印对象】

文章目录 static成员static修饰成员变量static成员变量初始化代码块 对象的打印写show方法打印对象调用toString打印对象 总结 static成员 举例&#xff1a;一个班的学生&#xff0c;在实例化每个人的名字&#xff0c;年龄&#xff0c;学号等学员信息时都不一样&#xff0c;但…

Redis单线程还是多线程?

&#x1f603; 个人学习笔记&#xff0c;不喜勿喷&#xff0c;望大佬指正&#xff01; 目录 一、Redis为什么选择单线程1. 是什么&#xff1f;2. why&#xff0c;为什么之前选择单线程&#xff1f;3. 作者原话使用单线程原因&#xff0c;官网证据 二、 为什么逐渐加入多线程特性…

网络安全,下一个十年饭碗稳了!

“战役”阶段&#xff0c;多个行业线下转为线上求生&#xff0c;云买菜、云蹦迪、云相亲、云聚会悄然兴起&#xff0c;未来属于云时代似乎成为互联网的共识&#xff0c;而与互联网息息相关的网络安全领域&#xff0c;已经站上了了蓬勃发展的“风口” 如今&#xff0c;网络安全前…

如何用Postman做接口自动化测试?一文5个步骤带你成功实现!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用例…

Python超入门(6)__迅速上手操作掌握Python

# 26.函数和参数 # 注意&#xff1a;有参函数和无参函数的名字要不同 def user(): # 无参函数print("hello world!")def user1(my_id): # 有参函数print(my_id)def user2(first_name, last_name): # 有参函数print(fMy name is {first_name} {last_name})print(&…

商超便利店经营小程序商城的作用是什么

店铺流量越来越低&#xff0c;线上平台入驻费用也不低&#xff0c;营销方式单一&#xff0c;店铺内经营数据无法统计&#xff0c;客户进店难&#xff0c;消费难&#xff0c;复购更难&#xff0c;越来越多的商超便利商家开始通过数字化商城解决问题。 通过【雨科】平台搭建商超便…