编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以二叉链表存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,代表一棵空树。然后再对二叉树进行中序遍历,输出遍历结果。

输入格式:

多组测试数据,每组测试数据一行,该行只有一个字符串,长度不超过100。

输出格式:

对于每组数据,

输出二叉树的中序遍历的序列,每个字符后面都有一个空格。

每组输出一行,对应输入的一行字符串。

输入样例:(及其对应的二叉树)

abc##de#g##f###

输出样例:

c b e g d f a

代码:

//一看到'#'我就想到用栈,按前序顺序存储,再按中序遍历输出,遇到字符就入栈,遇到'#'出栈
#include <bits/stdc++.h>
using namespace std;
int main()
{char a[10005];stack <char> s;while(~scanf("%s",a)){int i=0;for(i=0;a[i]!='\0';i++){if(a[i]=='#'&&!s.empty()){printf("%c ",s.top());s.pop();}else s.push(a[i]);}while(!s.empty()){if(s.top()!='#')printf("%c ",s.top());s.pop();  }printf("\n");}
}

还可以直接从树的定义出发

//其实思路挺简单的,一个创建树函数,一个中序遍历函数就搞定
#include <bits/stdc++.h>
using namespace std;
typedef struct TreeNode* BinTree;
typedef char ElemType;
struct TreeNode
{ElemType Data;BinTree left;BinTree right;
};
int i=0;
char str[105];
BinTree CreateBinTree(){if(str[i]=='#'){i++;return NULL;}BinTree T=(BinTree)malloc(sizeof(struct TreeNode));T->Data=str[i];i++;T->left=CreateBinTree();T->right=CreateBinTree();return T;
}
void InorderTraversal(BinTree T)
{if(T){InorderTraversal(T->left);printf("%c ",T->Data);InorderTraversal(T->right);}
}
int main()
{while(~scanf("%s",str)){BinTree T=CreateBinTree();InorderTraversal(T);cout<<endl;i=0;  //注意i要重置}
}

7-3 前序序列创建二叉树 (25 分) PTA相关推荐

  1. 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)

    假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...

  2. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  3. 7-11 玩转二叉树 (25 分)

    7-11 玩转二叉树 (25 分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的 ...

  4. 【CCCC】L2-011 玩转二叉树 (25分),二叉树建树与遍历(我讨厌树,@L2-006)

    problem L2-011 玩转二叉树 (25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设 ...

  5. 7-234 两个有序序列的中位数 (25 分)

    7-234 两个有序序列的中位数 (25 分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0​,A1​,⋯,AN−1​的中位数指A(N−1)/2​的值,即第 ...

  6. 由标明空子树的先序遍历序列创建二叉树

    由标明空子树的先序遍历序列创建二叉树 i=0 def createBiTree2(preOrder): # i为常数0 global i c = preOrder[i] # 取字符 if c != ' ...

  7. 按照前序遍历创建二叉树及树的四种遍历方式

    一.二叉树的介绍 二叉树的特点是二叉树的每个结点的度都不大于2,可以视为每个结点都有左孩子和右孩子.故二叉树结点的数据结构为 二.二叉树的特点 1.设根结点所在的层数为第1层,则第i层最多有个结点. ...

  8. 扩展二叉树的中序序列创建二叉树?

    一.前言 我们都知道,任意一棵二叉树的前序序列.中序序列.后序序列都是唯一的.但是,反过来是否唯一对应呢?

  9. 先根序列创建二叉树c语言,用C语言创建二叉树并先序遍历.doc

    用C语言创建二叉树并先序遍历 用C语言创建二叉树并 #include "stdio.h" #include "stdlib.h" typedef struct ...

  10. 5-14 电话聊天狂人 (25分)/PTA

    5-14 电话聊天狂人   (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤10​5​​),为通话记录条数.随后NN行,每 ...

最新文章

  1. 计算机基础学习必看书籍汇总
  2. beangle commons 4.0.0 release
  3. Docker容器网络管理
  4. Java多线程-Callable和Future
  5. 大型门户网站的可伸缩性架构设计
  6. 《面向对象的思考过程(原书第4版)》一1.11 组合
  7. java接口并发衡量_java 后端设计高并发接口总结
  8. vb.net 中最小化到托盘和锁定窗体大小的问题(notifyIcon的两个重要属性)
  9. windows server 系统SERVER服务消失无法共享
  10. 最新VmWare14激活序列号
  11. iOS UISwitch控件
  12. html倒计时插,JS倒计时插件
  13. SoundTouch音频处理库
  14. 排队服务系统仿真研究计算机模拟,基于蒙特卡洛方法排队系统性能的仿真优化研究...
  15. 晨光文具去年赚5亿,连2000元都拿来理财
  16. dubbo暴露出HTTP服务
  17. epsfallback_广东移动通过EPS Fallback方式成功完成了5G高清语音和视频呼叫
  18. html合并单元格和其中的数据,巧妙提取合并单元格及对应单元格数据
  19. 【整理】22款免费在线图表制作工具
  20. logback系列之四:输出日志到不同文件

热门文章

  1. 暴力推导 Beta 函数与 Gamma 函数关系式
  2. 论文笔记:DELPHI:预测蛋白质相互作用位点的精确深度集成模型
  3. ICML2022论文解读『Sparse Double Descent: Where Network Pruning Aggravates Overfitting』
  4. 共享计算机后无法访问磁盘,win7局域网怎么共享整个硬盘,如D盘E盘F盘等等-win7怎么共享磁盘,win7共享后无权限访问...
  5. 高等数学:多元函数微分学
  6. layui图标显示不正常,显示成方块
  7. 物联网、大数据、云计算、人工智能之间的关系
  8. 绪论 数据库系统工程师考试分析
  9. Mecanim 工作流
  10. 单列通栏布局版式示意HTML,整体布局2——页面排版布局