(二叉树存储+递归遍历)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,一经查实,立即删除!

相关文章

java mutator_Java-使用Accessor和Mutator方法

小编典典让我们看一下基础知识&#xff1a;“ Accessor”和“ Mutator”只是获取器和设置器的奇特名称。一个获取器“Accessor”返回一个类的变量或其值。设置器“ Mutator”设置类变量指针或其值。因此&#xff0c;首先您需要设置一个带有一些要获取/设置的变量的类&#xff1…

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

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

java反序列化异常接不到_由Java对象反序列化异常想到的

今天写代码时候遇到一个异常&#xff0c;异常信息如下&#xff1a;Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.spri…

(找规律)Magic of David Copperfield

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

java 日期只计算年月日大小_Java 计算两个日期相差多少年月日

JDK7及以前的版本&#xff0c;计算两个日期相差的年月日比较麻烦。JDK8新出的日期类&#xff0c;提供了比较简单的实现方法。/*** 计算2个日期之间相差的 相差多少年月日* 比如&#xff1a;2011-02-02 到 2017-03-02 相差 6年&#xff0c;1个月&#xff0c;0天*paramfromDate Y…

(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字节码文件&#…

(二分)Trailing Zeroes (III)

题目&#xff1a; n的阶乘尾部有q个连续的0&#xff0c;现在给你q&#xff0c;请你算出满足条件的n&#xff0c;如果有多个n满足条件&#xff0c;输出最小的那个即可。 Input 输入一个T(T < 10000),表示样例数量。 每个样例输入一个q。(1 < q < 100,000,000) Outp…

ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤

异常关机后&#xff0c;金蝶帐套突然无法访问&#xff0c;发现数据库置疑&#xff0c;使用此方案解决&#xff1a;注意&#xff1a;在做任何修复操作之前&#xff0c;请务必备份.mdf/.ndf以及.ldf文件。一般情况下这样可以解决&#xff1a;1、将数据库设置为应急状态ALTER DATA…

(DFS)n皇后问题

Problem Description 在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。 你的任务是&#xff0c;对于给定的N&#xff0c;求出有多少种合法的放置…

(DFS)棋盘问题(poj1321)

题目&#xff1a; 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放k个棋子的所有可行的摆…

(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规范中…

(DFS or BFS)Find The Multiple(poj1426)

题目&#xff1a; 给定一个正整数n&#xff0c;请编写一个程序来寻找n的一个非零的倍数m&#xff0c;这个m应当在十进制表示时每一位上只包含0或者1。你可以假定n不大于200且m不多于100位。 提示&#xff1a;本题采用Special Judge&#xff0c;你无需输出所有符合条件的m&…

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 stl分解_[STL训练]寻梦-题解(Java代码)极简思路

注意事项: insert()方法只能被 StringBuffer 类的对象调用参考代码:import java.util.Scanner;public class Main {private static int n 0;public static void main(String[] args) {Scanner scanner new Scanner(System.in);n scanner.nextInt();int m n * 2;for (int i…

(BFS)Prime Path (poj3126)

题目&#xff1a; 孤单的zydsg又一次孤单的度过了520&#xff0c;不过下一次不会再这样了。zydsg要做些改变&#xff0c;他想去和素数小姐姐约会。 所有的路口都被标号为了一个4位素数&#xff0c;zydsg现在的位置和素数小姐姐的家也是这样&#xff0c;如果两个路口间只差1个数…

java图片资源存放_Java编程中图片文件放哪

举个例子&#xff1a;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/*按扭类*/classBombextendsJButton{publicintnum_x,num_y;//第几号方块publicintBombRoundCount;//周围雷数...举个例子&#xff1a;import java.awt.*;import java.awt.event.*;import jav…

(BFS)Dungeon Master(poj2251)

题目&#xff1a; 你被困在一个3D地牢中且继续寻找最短路径逃生&#xff01;地牢由立方体单位构成&#xff0c;立方体中不定会充满岩石。向上下前后左右移动一个单位需要一分钟。你不能对角线移动并且迷宫四周坚石环绕。 是否存在逃出生天的可能性&#xff1f;如果存在&#…

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

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