题目选自洛谷P1305

这篇用来二叉树入门,讲述遍历二叉树的基本过程代码, 新二叉树只是洛谷的题目叫这个。

对于该题,我们用一个结构体node来表示树的每个结点,这个结构体数组tree来代表一棵树。

结构体内保存结点的值(字符值),左、右孩子的下标,这样我们可以直接通过下标来访问树了,进而输出节点的值。

为了知道根结点是从哪个开始的,我们在第一次输入三个字符之前记录一下第一个字符,对应的是哪一个位置就好。

对于树,我们采用映射的思想,因为只有26个字母,所以我们将a放在0下标的位置...也就是

t[s1-'a'].value=s1; //表示结点s1对于‘a’的绝对位置上,存的值就是s1;

(事实上也可以不保存值,因为0就是a了 依次排列下去,输出时直接+'a'输出字符也行)

然后我们把所有的左右孩子标记为-1,代表没有左右孩子,

对于s2和s3两个字符,如果!='*',就说明有孩子:

if(s2!='*') t[s1-'a'].left = (int)(s2-'a');

if(s3!='*') t[s1-'a'].right = (int)(s3-'a');

这样就是把s1结点的左右位置更改一下。

最重要的就是如何前、中、后序输出一棵树了。

下面给出3中遍历的代码,理解可能不是很容易,但是记住这个代码就非常地简单了!

例如前序遍历,无非就是先访问(输出),然后往左访问,再往右访问。

因为都是通过递归完成的,所以实在想不通过程也不必深究。

void pre_order(int x){  //前序遍历
    printf("%c",t[x].value);
    if(t[x].left!=-1) pre_order(t[x].left);
    if(t[x].right!=-1) pre_order(t[x].right);
}
void in_order(int x){ //中序遍历
    if(t[x].left!=-1) in_order(t[x].left);
    printf("%c",t[x].value);
    if(t[x].right!=-1) in_order(t[x].right);
}
void post_order(int x){ //后序遍历
    if(t[x].left!=-1) post_order(t[x].left);
    if(t[x].right!=-1) post_order(t[x].right);
    printf("%c",t[x].value);
}

例如该题目分别进行前中后序输出的结果就是这样的:

验证过,没毛病!

题目描述

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

输入格式

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

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

空节点用 * 表示

输出格式

二叉树的前序遍历。

输入输出样例

输入 1

6
abc
bdi
cj*
d**
i**
j**

输出 1

abdicj

解题代码:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int n;
char s1,s2,s3;
struct node{char value;int left=-1,right=-1;
}t[30];
void pre_order(int x){printf("%c",t[x].value);if(t[x].left!=-1) pre_order(t[x].left);if(t[x].right!=-1) pre_order(t[x].right);
}
int main(){cin>>n;int index=-1;while(n--){cin>>s1>>s2>>s3;if(index==-1){index=(int)(s1-'a');}t[s1-'a'].value=s1;if(s2!='*') t[s1-'a'].left = (int)(s2-'a');if(s3!='*') t[s1-'a'].right = (int)(s3-'a');}pre_order(index);return 0;
}

二叉树——新二叉树(洛谷 P1305)相关推荐

  1. 二叉树——医院设置(洛谷 P1364)

    题目选自洛谷P1364 从指定结点开始,使用DFS,对于某个结点来说,搜索的深度就是源点到这个结点的距离,单点贡献(该点所有居民到医院的距离之和)就是源点到这个结点的距离乘上该点的居民数量:然后加上自 ...

  2. 二叉树——美国血统(洛谷 P1827)

    题目选自洛谷P1827 根据前序.中序遍历求出后序遍历,这也是二叉树很重要且基本的知识,还是有必要练练. 至于什么是前.中.后序遍历,这里就不再过多讲述. 用手模拟求解是简单的,接下来看看如何用代码来 ...

  3. 二叉树——二叉树的深度(洛谷 P4913)

    题目选自洛谷P4913 题目描述 给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0.建好树后希望知道这棵二叉树的深度.二叉树的深度是指从根节点到叶子结点时,最多 ...

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

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

  5. 用任意合法序列建立一棵二叉树(洛谷P1305题题解,Java语言描述)

    前言 这题是极其麻烦极其麻烦的一道题(前提是你不知道它有套路)-- 我们不讲那些歪门邪道,我们正儿八经的解一下,想正经求解,很麻烦很麻烦... 题目要求 P1305题题解 分析 这题你看着容易,那是你 ...

  6. 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)

    题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...

  7. [JLOI2014]松鼠的新家 洛谷P3258

    题目链接 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&quo ...

  8. [洛谷P1040] 加分二叉树

    洛谷题目链接:加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di ...

  9. 信息学奥赛一本通 1981:【18NOIP普及组】对称二叉树 | 洛谷 P5018【NOIP2018 普及组】 对称二叉树

    [题目链接] ybt 1981:[18NOIP普及组]对称二叉树 洛谷 P5018[NOIP2018 普及组] 对称二叉树 [题目考点] 二叉树 [解题思路] 先求出二叉树中各子树的结点数 遍历二叉树 ...

最新文章

  1. xpage 传参_Vuex入门、同步异步 存取值
  2. 使用pydub实现训练声音数据集加噪
  3. 手把手教你安装鸿蒙和运行第一个Demo(js)版
  4. linux 下启动jar小程序
  5. 【时间序列】时间序列建模的时间戳与时序特征衍生思路
  6. Elasticsearch中的document数据格式,简单的集群管理,商品的索引的CRUD操作(学习资料记录)
  7. 翻译 《Why Indy?》计划进度表
  8. 求链表是否有环和第一个交点
  9. java加载jdbc驱动,加载JDBC驱动
  10. 谷歌强烈推荐!浏览器助手,让你的浏览器至少提升10个档次!
  11. yum安装软件报错:Invalid configuration value: failovermethod=priority...
  12. Python: 计算百分比
  13. Hexo | yilia主题安装
  14. 计算机学院运动会解说词,学校运动会解说词30篇
  15. 基于android端计步器软件的尝试
  16. 一个屌丝程序猿的人生(一百一十七)
  17. 华为V8手机USB OTG Type-C接口数据线
  18. 链接chinanet无法出现登陆界面(电脑),360开wifi说缺少一个网卡
  19. C++面向对象实验(四)
  20. C6678多核DSP开发——image_processing例程

热门文章

  1. typedef用法(1)
  2. [转]apache MPM介绍
  3. 自己动手清除电脑中的***程序
  4. 我是一个*** (十四) 完
  5. python自动化上传图片_Python(二)借助七牛云通过脚本自动获取上传图片外链
  6. 软件开发安全性_开发具有有效安全性的软件的最佳方法
  7. raspberry pi3_我们将赠送Raspberry Pi 3 Ultimate Starter Kit
  8. ES6异步编程: co函数库的含义与用法
  9. HTML section元素
  10. 王者非法进入服务器维护封号,王者荣耀哪些行为会被封号 违规封号行为汇总...