import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x)
{
val = x;
}
}
public static void main(String[] args) {
ArrayList<Integer> inputs = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
int n = in.nextInt(); //得到n个数
int i = 0,j=0;
int[] a = new int[n];
int[] b = new int[n];
while(i<n)
{
a[i]=in.nextInt();
i++;
}
while(j<n)
{
b[j]=in.nextInt();
j++;
}
TreeNode root = reConstructBinaryree(a,b);
printFromTopToBottom(root);
}
public static TreeNode reConstructBinaryree(int[] pre,int[] in)
{
if(pre==null||in==null)
{
return null;
}
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<in.length;i++)
{
map.put(in[i],i);
}
return preIn(pre,0,in.length-1,in,0,in.length-1,map);
}
public static TreeNode preIn(int[] p,int pi,int pj,int[] in,int ii,int ij,HashMap<Integer,Integer> map)
{
if(pi>pj)
{
return null;
}
Main m = new Main();
TreeNode head = m.new TreeNode(p[pi]);
int index = map.get(p[pi]);
head.left = preIn(p,pi+1,pi+index-ii,in,ii,index-1,map);
head.right = preIn(p,pi+index-ii+1,pj,in,index+1,ij,map);
return head;
}
public static void printFromTopToBottom(TreeNode root)
{
if(root==null)
{
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty())
{
root = queue.poll();
if(root.left!=null)
{
queue.offer(root.left);
}
if(root.right!=null)
{
queue.offer(root.right);
}
System.out.println(root.val+" ");
}
}
// write your code here
}
题目描述
给定一棵二叉树的前序(根、左、右)和中序(左、根、右)的打印结果,输出此二叉树按层(从左往右)打印结果。
例如一棵二叉树前序:1 2 4 5 3;中序:4 2 5 1 3。可以构建出下图所示二叉树:

按层打印的结果则为:1 2 3 4 5。
打印二叉树
最新推荐文章于 2019-04-28 20:58:00 发布