Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int post[] = new int[n+1], in[] = new int[n+1];
for (int i=1; i<=n; ++i) {
post[i] = scanner.nextInt();
}
for (int i=1; i<=n; ++i) {
in[i] = scanner.nextInt();
}
TreeNode root = create(post, 1, n, in, 1, n);
LinkedList<TreeNode> q = new LinkedList<>();
q.add(root);
int count = 0;
while(!q.isEmpty()) {
TreeNode nowNode = q.peek();
q.poll();
++count;
if (count==n) {
System.out.print(nowNode.data);
} else {
System.out.print(nowNode.data+" ");
}
if (nowNode.left!=null) {
q.add(nowNode.left);
}
if (nowNode.right!=null) {
q.add(nowNode.right);
}
}
}
public static TreeNode create(int[] post, int postLeft,
int postRight,
int[] in, int inLeft, int inRight) {
if (postLeft > postRight) {
return null;
}
TreeNode root = new TreeNode(post[postRight]);
// 从中序遍历中找出根节点
int findIndex = -1;
for (int i=inLeft; i<=inRight; ++i) {
if (in[i]==root.data) {
findIndex = i;
break;
}
}
// 计算左子树的数量
int leftNum = findIndex - inLeft;
root.left = create(post, postLeft, postLeft+leftNum-1,
in, inLeft, findIndex-1);
root.right = create(post, postLeft+leftNum, postRight-1,
in, findIndex+1, inRight);
return root;
}
}
class TreeNode {
int data;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int data) {
this.data = data;
}
}