【简单数据结构】二叉树的建立和递归遍历--洛谷 P1305
题目描述
输入一串二叉树,用遍历前序打出。
输入格式
第一行为二叉树的节点数n。(n \leq 26n≤26)
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式
前序排列的二叉树
输入输出样例
6
abc
bdi
cj*
d**
i**
j**
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的更多相关文章
- 二叉树的建立与递归遍历C语言版
</pre><pre name="code" class="cpp">#include <stdio.h> #include ...
- UVa 122 Trees on the level(链式二叉树的建立和层次遍历)
题目链接: https://cn.vjudge.net/problem/UVA-122 /* 问题 给出每个节点的权值和路线,输出该二叉树的层次遍历序列. 解题思路 根据输入构建链式二叉树,再用广度优 ...
- 二叉树入门(洛谷P1305)
题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...
- golang简单实现二叉树的数据添加和遍历
代码实现 package tree import "fmt" type Node struct { elem interface{} left, right *Node } typ ...
- 洛谷——P1305 新二叉树(新建二叉树以及遍历)
题目描述输入一串二叉树,用遍历前序打出. 输入输出格式输入格式: 第一行为二叉树的节点数n.(n \leq 26n≤26) 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...
- 洛谷 P1305 新二叉树
P1305 新二叉树 题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...
- 洛谷 P1305 新二叉树 Label:字符串的输出总是有惊喜
题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...
- 马的遍历 洛谷 p1443
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
随机推荐
- 《高性能利器》-32张图带你解决RocketMQ所有场景问题
一.RocketMQ的基本原理 RocketMQ基本架构图如下 从这个架构图上我们可以知道,RocketMQ有4块核心部分: NameServer:管理Broker的信息,让使用MQ的系统感知到集群里 ...
- Linux进程理解与实践(一)基本概念和编程概述(fork,vfork,cow)
进程 and 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- MySQL学习02(操作数据库)
操作数据库 结构化查询语句分类 名称 解释 命令 DDL(数据库定义语言) 定义和管理数据对象,例如数据库和数据表 create.drop.alter DML(数据操作语言) 用于操作数据库对象中所包 ...
- Python语言系列-06-面向对象1
楔子 #!/usr/bin/env python3 # author:Alnk(李成果) # 人狗大战例子引入面向对象 # 版本1 def hero(name, sex, hp, ce, level= ...
- CTF-flask模板注入学习
今天又看到了一道这样的题,之前一直都学不明白的东西 反反复复给你看的时候,就想搞明白了. 我们做题的,需要知道flask是怎么运行的就行了. 这个就是一个最简单的flask应用,当我们访问的时候,就会 ...
- SpringBoot 整合 SpringSecurity 梳理
文档 Spring Security Reference SpringBoot+SpringSecurity+jwt整合及初体验 JSON Web Token 入门教程 - 阮一峰 JWT 官网 Sp ...
- 干货!4大实验项目,深度解析Tag在可观测性领域的最佳实践!
Opentelemetry协议,是CNCF(Cloud Native Computing Foundation-云原生计算基金会)定义的最新一代的可观测规范(目前还在孵化中),该规范定义了可观测性的三 ...
- 在JavaScript中安全访问嵌套对象
大多数情况下,当我们使用JavaScript时,我们将处理嵌套对象,并且通常我们需要安全地访问最里面的嵌套值. 比如: const user = { id: 101, email: 'jack@dev ...
- windows编译boost
1. https://www.boost.org 下载boost源码 boost_1_73_0.zip解压. 2.准备编译前的配置,打开vs2017 x86 CMD工具,进入目录boost_1_73_ ...
- mfc HackerTools防止程序双开
来自:https://github.com/TonyChen56/HackerTools 1 HANDLE hMutex = CreateMutexA(NULL, FALSE, "GuiSh ...