• [PAT] 1020 Tree Traversals (25 分)Java


    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

     1 package pattest;
     2 
     3 import java.util.LinkedList;
     4 import java.util.Scanner;
     5 
     6 /**
     7  * @Auther: Xingzheng Wang
     8  * @Date: 2019/2/28 15:52
     9  * @Description: pattest
    10  * @Version: 1.0
    11  */
    12 public class PAT1020 {
    13     static Scanner scanner = new Scanner(System.in);
    14 
    15     static class Node {
    16         int value;
    17         Node left;
    18         Node right;
    19 
    20         Node(int value) {
    21             this.value = value;
    22         }
    23 
    24         @Override
    25         public String toString() {
    26             return "Node{" + "value=" + value + ", left=" + left + ", right=" + right + '}';
    27         }
    28     }
    29 
    30     private static Node bulidTree() {
    31         int size = scanner.nextInt();
    32         int[] postOrder = new int[size];
    33         int[] inOrder = new int[size];
    34         for (int i = 0; i < size; i++) {
    35             postOrder[i] = scanner.nextInt();
    36         }
    37         for (int i = 0; i < size; i++) {
    38             inOrder[i] = scanner.nextInt();
    39         }
    40         Node root = build(postOrder, inOrder, 0, size - 1, 0, size - 1);
    41         return root;
    42     }
    43 
    44     private static Node build(int[] postOrder, int[] inOrder, int postStart, int postEnd, int inStart, int inEnd) {
    45         if (postStart > postEnd) {
    46             return null;
    47         }
    48         if (postStart == postEnd) {
    49             return new Node(postOrder[postStart]);
    50         }
    51         int root = postOrder[postEnd--];
    52 
    53         //find root in inOrder
    54         int inIndex = -1;
    55         for (int i = inStart; i <= inEnd; i++) {
    56             if (root == inOrder[i]) {
    57                 inIndex = i;
    58                 break;
    59             }
    60         }
    61         //recursion build
    62         int leftSize = inIndex - inStart;
    63         int rightSize = inEnd - inIndex;
    64         Node rootNode = new Node(root);
    65         rootNode.left = build(postOrder, inOrder, postStart, postStart + leftSize - 1, inStart, inIndex - 1);
    66         rootNode.right = build(postOrder, inOrder, postEnd - rightSize + 1, postEnd, inIndex + 1, inEnd);
    67         return rootNode;
    68     }
    69 
    70     public static void main(String[] args) {
    71         Node root = bulidTree();
    72         LinkedList<Node> queue = new LinkedList<>();
    73         queue.add(root);
    74         while (!queue.isEmpty()) {
    75             Node poll = queue.poll();
    76             if (poll.left != null) {
    77                 queue.add(poll.left);
    78             }
    79             if (poll.right != null) {
    80                 queue.add(poll.right);
    81             }
    82             System.out.printf("%d%s", poll.value, queue.isEmpty() ? "
    " : " ");
    83         }
    84     }
    85 }
  • 相关阅读:
    一、入门实例
    十四、事物配置
    JAVA-调用http链接
    ORACLE 年龄计算到月份
    ORACLE和MYSQL 去重查询
    JAVA--将图片转为BASE64编码并返回thymeleaf页面
    JAVA--将图片保存至项目路径
    java--获取类加载路径和项目根路径
    excel执行INSERT和UPDATE操作语句
    c# 未能加载Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342
  • 原文地址:https://www.cnblogs.com/PureJava/p/10498018.html
Copyright © 2020-2023  润新知