Codevs 二叉树遍历问题 合集

2010 求后序遍历

    时间限制: 1 s    空间限制: 64000 KB    题目等级 : 白银 Silver

题目描述 Description

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

输入描述 Input Description

共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。

输出描述 Output Description

仅一行,表示树的后序遍历序列。

样例输入 Sample Input

abdehicfg

dbheiafcg

样例输出 Sample Output

dhiebfgca

数据范围及提示 Data Size & Hint

输入长度不大于255。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 string n,m;
 6 void postorder(int lp,int rp,int li,int ri)
 7 {
 8     if(lp==rp) { cout<<n[lp];return; }
 9     if(lp>rp||li>ri) return ;
10     int k=m.find(n[lp]);
11     postorder(lp+1,lp+k-li,li,k-1);
12     postorder(lp+k-li+1,rp,k+1,ri);
13     cout<<n[lp];
14 }
15 int main()
16 {
17     cin>>n>>m;
18     int len=n.size();
19     postorder(0,len-1,0,len-1);
20     return 0;
21 }

只需要在前序遍历中找出根节点,在中序遍历中划分开左右子树的列表,然后再继续递归即可~~

3143 二叉树的序遍历

    时间限制: 1 s    空间限制: 32000 KB    题目等级 : 白银 Silver

题目描述 Description

求一棵二叉树的前序遍历,中序遍历和后序遍历

输入描述 Input Description

第一行一个整数n,表示这棵树的节点个数。

接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。

输出描述 Output Description

输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。

样例输入 Sample Input

5

2 3

4 5

0 0

0 0

0 0

样例输出 Sample Output

1 2 4 5 3

4 2 5 1 3

4 5 2 3 1

数据范围及提示 Data Size & Hint

n <= 16

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 int n,x,y;
 6 struct node{
 7     int left,right;
 8 }tree[256];
 9 void preorder(int k)
10 {
11     cout<<k<<‘ ‘;
12     if(tree[k].left!=0)
13       preorder(tree[k].left);
14     if(tree[k].right!=0)
15       preorder(tree[k].right);
16 }
17 void inorder(int k)
18 {
19     if(tree[k].left!=0)
20       inorder(tree[k].left);
21     cout<<k<<‘ ‘;
22     if(tree[k].right!=0)
23       inorder(tree[k].right);
24 }
25 void postorder(int k)
26 {
27     if(tree[k].left!=0)
28       postorder(tree[k].left);
29     if(tree[k].right!=0)
30       postorder(tree[k].right);
31     cout<<k<<‘ ‘;
32 }
33 int main()
34 {
35     scanf("%d",&n);
36     for(int i=1;i<=n;i++)
37     {
38         scanf("%d%d",&x,&y);
39         tree[i].left=x;tree[i].right=y;
40     }
41     preorder(1);// 前序遍历
42     cout<<endl;
43     inorder(1);
44     cout<<endl;
45     postorder(1);
46     return 0;
47 }
时间: 2024-08-10 09:24:08

Codevs 二叉树遍历问题 合集的相关文章

《github一天一道算法题》:搜索二叉树接口实现大合集

读书.思考.写代码! 说明: (1)这里实现了搜索二叉树的全部常用操作 (2)限于时间和精力,实现的较为粗糙,内存泄露.成员变量访问控制.返回类型.异常安全等没有照顾的到 (3)一切实现的手段都是贴近底层操作,关注原理.以后可能对推倒重来,实现一个完备的接口系统. /********************************************* * [email protected] * 题目:二叉树接口实现大合集 * 具体:二叉树的创建.插入.最大值.最小值.前中后序递归遍历与非递

二叉树结构 codevs 1029 遍历问题

codevs 1029 遍历问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历.然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同.

[知识点]NOIP动态规划大合集

1.前言 NOIP2003-2014动态规划题目大合集,有简单的也有难的(对于我这种动态规划盲当然存在难的),今天就把这些东西归纳一下,做一个比较全面的总结,方便对动态规划有一个更深的理解. 2.NOIP2003 加分二叉树 树形DP入门题,根据题意,一个树的加分=左子树*右子树+根节点,由此可以设f[i][j]为子树i到j的加分,则有方程:f[i][j]=max{d[t]+f[i,t-1]*f[t+1,j]} ( t∈[i,j] ) 3.NOIP2004 合唱队形 应该是最简单的一道了,枚举队

Struts+Hibernate+Spring面试题合集及答案

Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 1.2. 什么是Hibernate的并发机制?怎么处理并发问题? 2 1.3. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页? 3 1.4. hibernate的对象的三种持久化状态,并给出解释? 3 1.5. hibernate的三种状态之间

原生 JS 中对象相关 API 合集

https://juejin.im/entry/58f8a705a0bb9f0065a4cb20 原文链接:https://microzz.com/2017/04/20/jsobject/ 原生 JavaScript 中对象相关 API 合集 - 对象篇.现在 jQuery 已经没有那么有优势了,原生 JS 赶紧学起来... -- 由microzz分享 Microzz [email protected] 主页 文章 标签 GitHub 关于我 掘金专栏 SegmentFault Vue音乐播放器

w3school前端教程合集

有关前端开发的w3c教程合集. http://caibaojian.com/w3school/ 地图 ajax教程 Canvas教程 CSS教程 CSS3教程 CSS3选择器 CSS参考手册 DHTML教程 HTML教程 HTML5教程 HTML5音频教程 HTML DOM教程 JavaScript教程 jQuery教程 jQuery Ajax教程 jQuery事件 jQuery操作 jQuery选择器 jQuery遍历 json教程 XHTML教程

几何入门合集

F. Mirror 题意 链接 三维几何镜像问题: 有n个人在y=0的平面上(及xoz平面).z=0平面上有一面镜子(边平行于坐标轴).z=a平面上有q个点(保证a大于所有人的z坐标). 所有人面朝镜子,且在镜子和q个点之间(即每个人的z坐标保证0<z<a). 问对于某个点,让所有人能够通过镜子看到那个点的镜子的最小面积. 题解 首先考虑镜面,我们可以通过(初中科学的)镜面反射原理,关于z=0做出z=a的对称平面z=-a.问题就变成了n个人看z=-a上的某个点.(下图绿点是人,红点是询问点)

Vim命令合集

来源:Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 文件命令 打开单个文件 vim file 同时打开多个文件 vim file1 file2 file3 ... 在vim窗口中打开一个新文件 :open file 在新窗口中打开文件 :split file 切换到下一个文件 :bn 切换到上一

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树 二叉树的创建,关系建立 二叉树的创建,关系建立2 三叉链表法 双亲链表: 二叉树的遍历 遍历的分析PPT 计算二叉树中叶子节点的数目:使用全局变量计数器 计算二叉树中叶子节点的数目:不使用全局变量计数器 无论是先序遍历,中序遍历,后序遍历,求叶子的数字都不变;因为本质都是一样的,任何一个节点都会遍历3趟 求二叉树的高度 二叉树的拷