题目描述

输入一串二叉树,用遍历前序打出。

输入格式

第一行为二叉树的节点数n。(n \leq 26n≤26)

后面n行,每一个字母为节点,后两个字母分别为其左右儿子。

空节点用*表示

输出格式

前序排列的二叉树

输入输出样例

输入 #1复制

6
abc
bdi
cj*
d**
i**
j**
输出 #1复制

abdicj

代码:
 1 #include <cstdio>
2 using namespace std;
3
4 struct Node{
5 int lsh = -1 , rsh = -1;  //左子树和右子树
6 };
7
8 bool vis[30];  //由于数组不是连续的,通过vis判断是否有值
9 bool isNotRoot[100]; //不是根,最后只有一个节点的值是false
10 char s[5];
11 Node tree[50];  //五十个节点
12
13 void build(int P,int l,int r)
14 {
15 vis[P] = true;
16 if (l >= 0)
17 {
18 tree[P].lsh = l;
19 isNotRoot[l] = true;
20 vis[l] = true;
21 }
22 if (r >= 0)
23 {
24 tree[P].rsh = r;
25 isNotRoot[r] = true;
26 vis[r] = true;
27 }
28 }
29
30 void dfs(int n)
31 {
32 if (n<0) return;
33 printf("%c",char(n+'a'));//前序遍历的递归写法,中序和后序调整位置即可
34 dfs(tree[n].lsh);
35 dfs(tree[n].rsh);
36 }
37
38 int main()
39 {
40 int n =0;
41 scanf("%d",&n);
42
43 for (int i=0;i<n;i++)
44 {
45 scanf("%s",s);
46 build(s[0]-'a',s[1]-'a',s[2]-'a');
47 }
48
49 for (int i=0;i<=26;i++){
50 if (vis[i] && !isNotRoot[i])  //如果有值并且是根节点就遍历
51 {
52 dfs(i);
53 break;  //考虑到只有一个根节点,一个循环结束就不用继续了
54 }
55 }
56 printf("\n");
57 return 0;
58 }

最新文章

  1. 转向Web
  2. Hadoop 调研笔记
  3. 【转】Linux下查看文件和文件夹大小
  4. android 九宫加密记事本
  5. Codeforces 578B &quot;Or&quot; Game
  6. Leetcode 之Convert Sorted Array to Binary Search Tree(54)
  7. 如何在ALV_Grid的函数中定义下拉列表
  8. iOS 进阶 第二十一天(0531)
  9. select into from和insert into select from两种表复制语句区别
  10. HDU-3436 Queue-jumpers 树状数组 | Splay tree删除,移动
  11. [hadoop转载]tearsort
  12. Java使用百度云存储BCS-让你的数据下载飞起来
  13. MobileOA第一期总结
  14. java excel导出
  15. 算法:60.第k个排列
  16. 利用trie树实现前缀输入提示及trie的python实现
  17. Socket进程通信机制
  18. 小程序报错数据传输长度为 xxx 已经超过最大长度 xxx
  19. sql——inner join,where,left join的区别
  20. RDLC报表的相关技巧三(数量/金额的逐页累加)

热门文章

  1. 以命令行方式使用Desktop版Ubuntu
  2. Note about Cobertura
  3. Kurento实战之二:快速部署和体验
  4. sqli-labs lesson 23
  5. 联合迭代器与生成器,enumerate() 内置函数真香!
  6. SQL 练习28
  7. input 限制 上传文件类型
  8. 阿里云视频点播获取视频点播的video信息
  9. 十八:使用JDBC进行批处理
  10. mzy对于反射的复习