L2-006 树的遍历 (25分) java
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了L2-006 树的遍历 (25分) java,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4068字,纯文字阅读大概需要6分钟。
内容图文
![L2-006 树的遍历 (25分) java](/upload/InfoBanner/zyjiaocheng/638/b255918200024a97b9fc2aea4d7f2432.jpg)
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数NNN(≤30\le 30≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
4 1 6 3 5 7 2
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
import javax.management.monitor.Monitor;
//** Class for buffered reading int and double values *//*
class Reader {
static BufferedReader reader;
static StringTokenizer tokenizer;
// ** call this method to initialize reader for InputStream *//*
static void init(InputStream input) {
reader = new BufferedReader(new InputStreamReader(input));
tokenizer = new StringTokenizer("");
}
// ** get next word *//*
static String next() throws IOException {
while (!tokenizer.hasMoreTokens()) {
// TODO add ceck for eof if necessary
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
static boolean hasNext()throws IOException {
return tokenizer.hasMoreTokens();
}
static String nextLine() throws IOException{
return reader.readLine();
}
static char nextChar() throws IOException{
return next().charAt(0);
}
static int nextInt() throws IOException {
return Integer.parseInt(next());
}
static long nextLong() throws IOException {
return Long.parseLong(next());
}
static float nextFloat() throws IOException {
return Float.parseFloat(next());
}
static double nextDouble() throws IOException {
return Double.parseDouble(next());
}
static void close() throws IOException {
reader.close();
}
}
class Writer{
static BufferedWriter writer;
static void init(OutputStream outputStream) {
writer = new BufferedWriter(new OutputStreamWriter(outputStream));
}
static void print(Object object) throws IOException {
writer.write(object.toString());
}
static void println(Object object) throws IOException {
writer.write(object.toString());
writer.write("\n");
}
static void close() throws IOException {
// TODO Auto-generated method stub
writer.close();
}
}
public class Main {
public static void main(String[] args) throws IOException {
Reader.init(System.in);
Writer.init(System.out);
solve();
Reader.close();
Writer.close();
}
static class Node{
int data;
Node left = null;
Node right=null;
public Node(int data) {
this.data = data;
}
}
static int[]aft;
static int[]mid;
private static void solve() throws IOException {
int n = Reader.nextInt();
aft = new int[n];
mid = new int[n];
for (int i = 0; i < n; i++) {
aft[i] = Reader.nextInt();
}
for (int i = 0; i < n; i++) {
mid[i] = Reader.nextInt();
}
Node root = create(0, n-1, 0, n-1);
cengOrder(root);
}
static Node create(int aftLeft,int aftRight,int midLeft,int midRight) {
if (aftLeft>aftRight) {
return null;
}
Node root = new Node(aft[aftRight]);
// 从中序遍历中找出根节点
int index = -1;
for (int i = midLeft; i <= midRight; i++) {
if (mid[i] == root.data) {
index = i;
break;
}
}
// 计算左子树的数量
int leftNum = index-midLeft;
root.left = create(aftLeft,aftLeft+leftNum-1,midLeft,index);
root.right = create(aftLeft+leftNum,aftRight-1,index+1,midRight);
return root;
}
static void preOrder(Node root) throws IOException {
if (root!=null) {
Writer.println(root.data);
preOrder(root.left);
preOrder(root.right);
}
}
static void cengOrder(Node root) throws IOException {
Queue<Node>q = new LinkedList<Node>();
q.add(root);
int index = 0;
while (!q.isEmpty()) {
Node newNode = q.poll();
if (index++==0) {
Writer.print(newNode.data);
}else {
Writer.print(" "+newNode.data);
}
if (newNode.left!=null) {
q.add(newNode.left);
}
if (newNode.right!=null) {
q.add(newNode.right);
}
}
}
}
内容总结
以上是互联网集市为您收集整理的L2-006 树的遍历 (25分) java全部内容,希望文章能够帮你解决L2-006 树的遍历 (25分) java所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。