import java.util.*; /**  * Created by jose on 2018/9/18.  */ public class Red2 {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         while (sc.hasNext()){             String line = sc.nextLine();             String[] levelarr = line.split(" ");             List<Integer> level = new ArrayList<>();             for (int i = 0; i <levelarr.length; i++) {                 level.add(Integer.valueOf(levelarr[i]));             }             line = sc.nextLine();             String[] midarr = line.split(" ");             int[] mid  = new int[midarr.length];             for (int i = 0; i < midarr.length; i++) {                 mid[i]= Integer.parseInt(midarr[i]);             }             boolean[] visited = new boolean[1024];             Node head = build(level,mid,visited,0,mid.length-1);             leaf(head);             System.out.println();             pre_visited(head);             System.out.println();             pos_visited(head);         }     }     static void leaf(Node node){         if(node==null) return;         if(node.left == null&&node.right==null) {             System.out.print(node.value+" ");         }         leaf(node.left);         leaf(node.right);     }     static void pre_visited(Node node){         if(node == null) return;         System.out.print(node.value+" ");         pre_visited(node.left);         pre_visited(node.right);     }     static void pos_visited(Node node){         if(node == null) return;         pos_visited(node.left);         pos_visited(node.right);         System.out.print(node.value+" ");     }     static class Node{         int value;         Node left;         Node right;     }     public static Node build(List<Integer> level,int[] mid,boolean[] visited,int left,int right){         if(level.size()==0) return null;         Node head = new Node();         head.value = level.get(0);         int pos=0;         for (int i = left; i <= right; i++) {             if (level.get(0) == mid[i]){                 pos=i;                 break;             }         }         int cleft = left;         int cright = pos-1;         for (int i = 0; i < 1024; i++) {             visited[i]=false;         }         for (int i = cleft; i <= cright; i++) {             visited[mid[i]] = true;         }         List<Integer> leftchild=new ArrayList<>();         List<Integer> rightchild=new ArrayList<>();         for (int i = 1; i < level.size(); i++) {             if(visited[level.get(i)]){                 leftchild.add(level.get(i));             }else {                 rightchild.add(level.get(i));             }         }         head.left=build(leftchild,mid,visited,left,cright);         head.right=build(rightchild,mid,visited,pos+1,right);         return head;     } }
点赞 1

相关推荐

01-14 15:08
东南大学 Java
点赞 评论 收藏
分享
牛客网
牛客企业服务