(二叉树存储+递归遍历)Binary Tree Traversals

题目:

A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways in which the vertices of a binary tree can be systematically traversed or ordered. They are preorder, inorder and postorder. Let T be a binary tree with root r and subtrees T1,T2.

In a preorder traversal of the vertices of T, we visit the root r followed by visiting the vertices of T1 in preorder, then the vertices of T2 in preorder.

In an inorder traversal of the vertices of T, we visit the vertices of T1 in inorder, then the root r, followed by the vertices of T2 in inorder.

In a postorder traversal of the vertices of T, we visit the vertices of T1 in postorder, then the vertices of T2 in postorder and finally we visit r.

Now you are given the preorder sequence and inorder sequence of a certain binary tree. Try to find out its postorder sequence.
Input
The input contains several test cases. The first line of each test case contains a single integer n (1<=n<=1000), the number of vertices of the binary tree. Followed by two lines, respectively indicating the preorder sequence and inorder sequence. You can assume they are always correspond to a exclusive binary tree.
Output
For each test case print a single line specifying the corresponding postorder sequence.
Sample Input
9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6
Sample Output
7 4 2 8 9 5 6 3 1

分析与解答:

1.二叉树有根结点,有两个子结点,而且子结点数据类型和根节点相同,因此我们用struct存储
2.根据题中给的数据建树,先序后序中序,知道任意两个就可以建树
这题是给了中序和先序,左根右,根左右
主要问题就是根据遍历的性质找根,然后递归建立左子树右子树
这里写图片描述

先序:1 2 4 7 3 5 8 9 6
中序:4 7 2 1 8 5 9 3 6
先序第一个1是根
所以从中序开始找,472应当是第一个根的左子树
对应先序的247,可知,如果把左子树从新看成二叉树,那他的根就是2
再继续找,把左子树找完了
右子树35896 根是3,然后继续找

总结一下思想:
先创一个结点,他的根直接知道就是先序第一个数,先认为他没有左右子结点(因为如果递归到最后一个子叶,他没有子结点)
找到根后,通过递归调用,填他的左子树的结点值右子树的结点值

输出的话如果后序,输出:左子树,右子树,根
这题是由于空格的原因,我把数存到数组里了

#include <iostream>
#include <cstdio>
#include <cstring>
#include<cstdlib>
#include <algorithm>
#define N 1000
using namespace std;struct TreeNote
{int ch;        TreeNote * ltree;TreeNote * rtree;
};
TreeNote * CreatTree(int * preorder, int * inorder, int longth)
{TreeNote * sontree = new TreeNote;sontree-> ch = *preorder;sontree-> ltree = NULL;sontree-> rtree = NULL;if(longth == 0)return NULL;int index = 0;for(; index < longth; index++)if(inorder[index] == *preorder)break;sontree-> ltree = CreatTree(preorder+1, inorder, index);sontree-> rtree = CreatTree(preorder+index+1, inorder+index+1, longth-index-1);return sontree;
}
int a[1000];
int p=0;
void PostOrder(TreeNote * tone)
{if(tone){PostOrder(tone-> ltree);PostOrder(tone-> rtree);a[p++]=tone->ch;}
}int main()
{int preorder[N];int inorder[N];int t; while(cin>>t){p=0;memset(a,0,sizeof(a));for(int i=0;i<t;++i){cin>>preorder[i];}for(int i=0;i<t;++i){cin>>inorder[i];}TreeNote * tone = CreatTree(preorder, inorder, t);PostOrder(tone);for(int i=0;i<p;++i){if(i!=p-1) cout<<a[i]<<' ';else cout<<a[i];} putchar('\n');}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(二叉树创建+查找)精灵邮差

题目 精灵是非常奇特的生物。众所周知&#xff0c;他们可以活很长时间&#xff0c;他们神奇的能力不是一件容易接受的事情。此外&#xff0c;他们住在树上。但是&#xff0c;你可能不知道有些事情。虽然通过魔法传送提供东西非常方便&#xff08;很像电子邮件&#xff09;。他…

(找规律)Magic of David Copperfield

题目&#xff1a; 每一个参与的观众被要求将手指放在左上方的图片上&#xff08;即编号为1的图片&#xff09;&#xff0c;魔术师开始了&#xff1a;魔术师告诉观众在图片上移动k次&#xff08;移动是把手指放到上下左右相邻的图片上&#xff0c;如果那儿有图片的话&#xff0…

(DAG+固定终点的最长路和最短路)硬币问题

##题目&#xff1a; 有n种硬币&#xff0c;面值分别为v1, v2, …, vn&#xff0c;每种都有无限多。给定非负整数S&#xff0c;可以选用多少个硬币&#xff0c;使得面值之和恰好为S&#xff1f;输出硬币数目的最小值和最大值。 Input 第一行两个整数&#xff0c;n&#xff0c;S…

java虚拟机堆栈工作原理_java虚拟机工作原理?

展开全部从宏观上介绍一下Java虚拟机的e5a48de588b662616964757a686964616f31333363373731工作原理。从最初编写的Java源文件(.java文件)是如何一步步执行的&#xff0c;如下图所示&#xff0c;首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件&#…

(BFS)Catch That Cow(poj3278)

题目&#xff1a; 农夫知道一头牛的位置&#xff0c;想要抓住它。农夫和牛都于数轴上 &#xff0c;农夫起始位于点 N(0<N<100000) &#xff0c;牛位于点 K(0<K<100000) 。农夫有两种移动方式&#xff1a; 1、从 X移动到 X-1或X1 &#xff0c;每次移动花费一分钟 2…

java jmx 监控_只用五分钟为系统实现基于JMX的监控

早期是作为J2EE的一部分, 因此总给人一种开发起来会很"重"的感觉, 这让不少Java程序员宁愿选择自行实现"轻量级"方案. 时至今日, 借助一些优秀的开源项目, JMX 也可以用起来很"轻".pojo-mbean 使用Annotation对MBean进行声明, 省去不少 JMX规范中…

wsld2java axis_Weblogic+axis2安装

Weblogicaxis2安装实验环境系统版本使用到软件软件版本Redhat 6.3Ld-linux.so.2Ld-linux.so.2 安装的weblogic的需要安装(系统自带)Weblogic10.3Axis21.41在以下实验中我使用的是1.41的war包 &#xff0c;下载war包的话可以在weblogic中进行部署。实验步骤&#xff1a;启动webl…

java流读写_java流概述以及文件读写示例

1. 先分清楚是字节流还是字符流。字节流&#xff1a;InputStream OutputStream字符流&#xff1a;Reader Writer字符流与字节流的区别是读取的单位长度不同&#xff0c;字节流读8字节&#xff0c;字符流读16字节&#xff0c;所以有中文时&#xff0c;就得用字符流。2. 在字节/字…

python自动化操作应用程序错误_web自动化中踩过的低级错误坑(python+selenium)

1.定位了元素没有做下一步操作&#xff0c;比如&#xff0c;点击、输入等功能&#xff0c;而报错&#xff0c;报错信息如下&#xff1a;2.上传图片时&#xff0c;定位元素&#xff0c;应该定位input标签&#xff0c;点击页面input标签肉眼没有看到定位到任何元素&#xff0c;以…

qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)

目的&#xff1a;GIS网络分析用于对段路径等问题。这里仅仅讲述如何建立网络分析。网络建立前必须满足以下条件1.要素文件在节点处打断(本文下面会叙述)2.要素文件在地理数据库里的数据集里(一般是这样)3.要素文件包含的数据集里已经验证拓扑&#xff0c;并确保没有错误(可选)注…

base64 java php_利用PHP将图片转换成base64编码的实现方法

先来说一下为什么我们要对图片base64编码base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一。base64主要不是加密&#xff0c;它主要的用途是把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字符&#xff0c;不能直接传送&…

(BFS)Knight Moves(hdu1372)

题目&#xff1a; 在象棋王国&#xff0c;尼古拉斯.火山是一匹英俊的马&#xff0c;他非常幸运迎娶了白马王国的公主&#xff0c;他们将度蜜月&#xff0c;你现在是他们的女仆&#xff0c;火山会问你去一些地方最少需要多少步&#xff0c;这么简单的事当然难不倒你。由于火山是…

java上机作业要注意什么_Java第八次上机作业

1、请按照以下要求设计一个学生类Student&#xff0c;并进行测试。要求如下&#xff1a;1)Student类中包含姓名、成绩两个属性2)分别给这两个属性定义两个方法&#xff0c;一个方法用于设置值&#xff0c;另一个方法用于获取值.3)Student类中定义一个无参的构造方法和一个接收两…

java windows 2008_Windows server 2008 R2 安装Java环境

一、配置环境操作系统软件包Windows server 2008 R2jdk_1.7.rar二、安装操作1.右击解压jdk_1.7.rar&#xff1b;解压后双击运行jdk-7u79-windows-i586 .exe2.点击【下一步】一直到有个【更改】按钮&#xff0c;可以更改安装路径&#xff0c;设置完成后点击“下一步”。到达这个…

java 匿名类型_Java之匿名类讲解

匿名类&#xff0c;正如名字一样在java中没有名字标识的类&#xff0c;当然了编译后还是会安排一个名字的。下面是一个关于匿名类的简单例子&#xff1a;public classClient {public static voidmain(String[] args) throws InterruptedException {Thread tnew Thread(newRunna…

(并查集)小希的迷宫

题目&#xff1a; 上次Gardon的迷宫城堡小希玩了很久&#xff08;见Problem B&#xff09;&#xff0c;现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样&#xff0c;首先她认为所有的通道都应该是双向连通的&#xff0c;就是说如果有一个通道连通了房间A和B&…

(并查集)食物链

题目&#xff1a; 动物王国中有三类动物A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A吃B&#xff0c; B吃C&#xff0c;C吃A。 现有N个动物&#xff0c;以1&#xff0d;N编号。每个动物都是A,B,C中的一种&#xff0c;但是我们并不知道它到底是哪一种。 有人用两…

多线程销售问题java_Java多线程Runable售票系统实现过程解析

一、无等待&#xff0c;直接出票【虽然解决了不会冲票问题&#xff0c;但显然不符合实际生活】&#xff1a;package com.thread.sale;public class Sale {public static void main(String[] args) {//悟&#xff0c;那么设计爬虫的时候&#xff0c;下载的资源唯一&#xff0c;使…

带权并查集-Building Block

题目&#xff1a; John are playing with blocks. There are N blocks (1 < N < 30000) numbered 1…N。Initially, there are N piles, and each pile contains one block. Then John do some operations P times (1 < P < 1000000). There are two kinds of ope…

(模拟+floyd)Saving James Bond

题目&#xff1a; This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with…