[PAT]1020. Tree Traversals (25)@Java

来源:互联网 发布:编程的面向对像 编辑:程序博客网 时间:2024/05/22 10:53

1020. Tree Traversals (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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:
72 3 1 5 7 6 41 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2


package go.jacob.day1016;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;/** * 1020. Tree Traversals (25) *  * @author Jacob * */public class Demo2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] postorder = new int[n];int[] inorder = new int[n];for (int i = 0; i < n; i++)postorder[i] = sc.nextInt();for (int i = 0; i < n; i++)inorder[i] = sc.nextInt();Node root = rebuild(postorder, 0, n - 1, inorder, 0, n - 1);Queue<Node> queue = new LinkedList<Node>();queue.offer(root);ArrayList<Integer> res = new ArrayList<Integer>();while (!queue.isEmpty()) {Node node = queue.poll();res.add(node.value);if (node.left != null)queue.offer(node.left);if (node.right != null)queue.offer(node.right);}System.out.print(res.get(0));for (int i = 1; i < res.size(); i++) {System.out.print(" " + res.get(i));}sc.close();}private static Node rebuild(int[] postorder, int postLeft, int postRight, int[] inorder, int inLeft, int inRight) {//System.out.println("hhhhhhhhhhh:"+postLeft+" "+postRight+" "+inLeft+" "+inRight);if (postLeft > postRight)return null;Node root = new Node(postorder[postRight]);int index = 0;for (int i = inLeft; i <= inRight; i++) {if (inorder[i] == postorder[postRight])index = i;}int leftNum = index - inLeft;root.left = rebuild(postorder, postLeft, postLeft + leftNum - 1, inorder, inLeft, index - 1);root.right = rebuild(postorder, postLeft + leftNum, postRight - 1, inorder, index + 1, inRight);return root;}/* * 构造树节点类 */static class Node {public Node(int value) {this.value = value;}int value;Node left;Node right;}}



原创粉丝点击