题目描述

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

输入格式

第一行为二叉树的节点数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 }

【简单数据结构】二叉树的建立和递归遍历--洛谷 P1305的更多相关文章

  1. 二叉树的建立与递归遍历C语言版

    </pre><pre name="code" class="cpp">#include <stdio.h> #include ...

  2. UVa 122 Trees on the level(链式二叉树的建立和层次遍历)

    题目链接: https://cn.vjudge.net/problem/UVA-122 /* 问题 给出每个节点的权值和路线,输出该二叉树的层次遍历序列. 解题思路 根据输入构建链式二叉树,再用广度优 ...

  3. 二叉树入门(洛谷P1305)

    题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...

  4. golang简单实现二叉树的数据添加和遍历

    代码实现 package tree import "fmt" type Node struct { elem interface{} left, right *Node } typ ...

  5. 洛谷——P1305 新二叉树(新建二叉树以及遍历)

    题目描述输入一串二叉树,用遍历前序打出. 输入输出格式输入格式: 第一行为二叉树的节点数n.(n \leq 26n≤26) 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...

  6. 洛谷 P1305 新二叉树

    P1305 新二叉树 题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...

  7. 洛谷 P1305 新二叉树 Label:字符串的输出总是有惊喜

    题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...

  8. 马的遍历 洛谷 p1443

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  9. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

随机推荐

  1. 线程的常用知识(包括 Thread/Executor/Lock-free/阻塞/并发/锁等)

    本次内容列表: 1.使用线程的经验:设置名称.响应中断.使用ThreadLocal 2.Executor:ExecutorService和Future 3.阻塞队列:put和take.offer和po ...

  2. Go的Channel发送和接收

    先来看一道面试题: 对已经关闭的 chan 进行读写,会怎么样?为什么? 在上一篇学习 Go 协程的文章中,知道 go 关键字可以用来开启一个 goroutine 进行任务处理,但多个任务之间如果需要 ...

  3. NOIP 模拟 $30\; \rm 毛一琛$

    题解 \(by\;zj\varphi\) 如何判断一个集合可以被拆成两个相等的部分? 枚举两个集合,如果它们的和相等,那么他们的并集就是合法的,复杂度 \(\mathcal O\rm(3^n)\) \ ...

  4. Docker运行sonarqube-(代码质量检测平台)

    sonarqube是什么 SonarQube是用于持续检查代码质量的开源平台. 可用于持续集成,持续部署流程中的代码检测环节. idea和jenkins都提供了插件配合使用. liunx推荐配置环境 ...

  5. ASP.NET Core教程:ASP.NET Core中使用Redis缓存

    参考网址:https://www.cnblogs.com/dotnet261010/p/12033624.html 一.前言 我们这里以StackExchange.Redis为例,讲解如何在ASP.N ...

  6. C#简单实现表达式目录树(Expression)

    1.什么是表达式目录树 :简单的说是一种语法树,或者说是一种数据结构(Expression) 2.用Lambda声明表达式目录树: 1 2 3 4 5 Expression<Func<in ...

  7. 查看node.js全局安装的插件路径

    查看 npm  全局插件 默认全局安装路径 参考:https://www.jianshu.com/p/f2873fcef5aa 首先 nodejs安装好之后,默认情况下会有如下配置 npm confi ...

  8. git 的指定参考教程

    https://www.runoob.com/git/git-create-repository.html

  9. mfc HackerTools释放资源

    作用: 在VC环境中除了我们所常用的Dialog.Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多. ...

  10. Contos 7.x 中Docker安装以及使用

    Docker是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中, 然 ...