codevs 1013 求先序排列

简介: 题目链接:http://codevs.cn/problem/1013/题目描述 Description给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度rchild=CreateBT2(post+k,p+1,n-k-1); //递归构造右子树3...

题目链接:http://codevs.cn/problem/1013/

题目描述 Description

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

输入描述 Input Description

两个字符串,分别是中序和后序(每行一个)

输出描述 Output Description

一个字符串,先序

样例输入 Sample Input

BADC

BDCA

样例输出 Sample Output

ABCD

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 
 5 #define MaxSize 100
 6 
 7 typedef char ElemType;
 8 typedef struct node 
 9 {    
10     ElemType data;            //数据元素
11     struct node *lchild;    //指向左孩子结点
12     struct node *rchild;    //指向右孩子结点
13 } BTNode;
14 
15 BTNode *CreateBT2(char *post,char *in,int n)
16 /*post存放后序序列,in存放中序序列,n为二叉树结点个数,
17 本算法执行后返回构造的二叉链的根结点指针*/
18 {
19     BTNode *s;
20     char r,*p;
21     int k;
22     if (n<=0) return NULL;
23     r=*(post+n-1);                            //根结点值
24     s=(BTNode *)malloc(sizeof(BTNode));        //创建二叉树结点*s
25     s->data=r;
26     for (p=in;p<in+n;p++)                    //在in中查找根结点
27         if (*p==r)
28             break;
29     k=p-in;                                    //k为根结点在in中的下标
30     s->lchild=CreateBT2(post,in,k);            //递归构造左子树
31     s->rchild=CreateBT2(post+k,p+1,n-k-1);    //递归构造右子树
32     return s;
33 }
34 void PreOrder1(BTNode *b)    //先序非递归遍历算法
35 {
36     BTNode *St[MaxSize],*p;
37     int top=-1;
38     if (b!=NULL) 
39     {   
40         top++;                        //根结点进栈
41         St[top]=b;
42         while (top>-1)                //栈不为空时循环
43         {
44             p=St[top];                //退栈并访问该结点
45             top--;
46             printf("%c",p->data);
47             if (p->rchild!=NULL)    //右孩子结点进栈
48             {
49                 top++;
50                    St[top]=p->rchild;
51             }
52             if (p->lchild!=NULL)    //左孩子结点进栈
53             {
54                 top++;
55                    St[top]=p->lchild;
56             }
57         }
58         printf("\n");
59     }
60 }
61 int main(int argc, char *argv[])
62 {
63     char str1[MaxSize],str2[MaxSize];//str1:中序序列,str2:后序序列 
64     BTNode *bt;
65     scanf("%s%s",str1,str2);
66     bt=CreateBT2(str2,str1,strlen(str1));
67     PreOrder1(bt);
68     return 0;
69 }

 

相关文章
|
JavaScript 前端开发 Python
传智播客预习视频(16倍速无人值守自动下一节)
传智播客预习视频(16倍速无人值守自动下一节)
1224 0
传智播客预习视频(16倍速无人值守自动下一节)
|
关系型数据库 MySQL 索引
【MySQL】当前读、快照读、MVCC
【MySQL】当前读、快照读、MVCC当前读:  select...lock in share mode (共享读锁)  select...for update  update , delete , insert   当前读, 读取的是最新版本, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。
12810 0
|
8月前
|
自然语言处理 开发者
GDC2025 | 探索最前沿的开源大模型技术与创新,2025全球开发者先锋大会,上海见!
2025全球开发者先锋大会将于2月21-23日在徐汇盛大召开!大会以“模塑全球 无限可能”为主题,定位“社区的社区”,旨在促进基模、垂模、语料、算力、基金、开发者、软件服务等产业生态深度对接。
320 0
|
12月前
|
数据采集 存储 监控
数据治理怎么做才是价值最大化的呢?
在数据驱动时代,数据成为企业的核心资产,其治理直接影响决策效率、创新能力和市场竞争力。数据治理是一项系统工程,涵盖策略、流程和技术,确保数据准确、一致、安全、可访问且合规,从而最大化价值。为实现这一目标,企业需明确治理战略、建立治理架构、制定质量标准、强化安全保护、推动数据文化,并持续优化与创新。这些综合措施将充分释放数据潜力,推动企业发展。
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能如何赋能教育发展?探索未来教育的新篇章
本文探讨人工智能(AI)对教育领域的深远影响,涵盖教学方式变革、教育资源均衡、教师角色重塑及学生能力培养等方面。生成式AI技术助力个性化教学,减轻教师负担,促进城乡教育公平。同时,AI教育强调伦理与法律知识,提升学生综合素养和职场竞争力。GAI认证等培训框架为学习者提供实用技能,助力其在数字时代脱颖而出。人工智能正推动教育迈向优质均衡发展,为未来人才培养铺就希望之路。
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-注意力机制】CoordAttention: 用于移动端的高效坐标注意力机制
YOLOv10专栏探讨了将位置信息融入通道注意力的创新方法,提出“坐标注意力”机制,改善移动网络性能。该机制通过两个1D特征编码捕捉空间依赖并保持位置细节,生成增强对象表示的注意力图。简单易整合到现有网络如MobileNet,几乎无额外计算成本,且在ImageNet及目标检测等任务中表现优越。实现代码展示了CoordAtt模块的工作流程。更多详情和配置见链接。
|
安全 网络安全 网络架构
IP地址的主要功能
IP地址是网络设备的唯一标识,用于数据包路由、网络通信、互操作性、安全管理和全球信息共享。它们确保数据准确传输,支持路由决策,允许设备安全互动,并打破地域限制。IP地址在不断发展的网络世界中扮演着核心角色。
|
XML JavaScript 前端开发
【面试题】面试官:谈谈你知道的DOM常见的操作
【面试题】面试官:谈谈你知道的DOM常见的操作
331 0
|
存储 SpringCloudAlibaba 监控
二十一.SpringCloud源码剖析-Hystrix的初始化
ystrix不是停更了吗?你在这写什么?是,Hystrix是停止更新版本了,说不定后面又继续更新了呢?比如阿里的dubbo不也是停更一段时间后又继续更新了么。Hystrix只是停止开发新的版本,并不是完全停止维护,有Bug依然会修复,Hystrix已经是比较稳定的,很多项目依旧在使用它。 再者说Hystrix是SpringCloud 第一代技术标准中的非常重要的一个组件,可以看做是我们学习SpringCloud全家桶的一个必不可少的过程。在实际项目中你当然可以使用Spring Cloud Alibaba 等更先进的技术来作为微服务架构,使用sentinel代替Hystrix,但是如果你只会使