Advertisement
YChalk

Top Tree View

Apr 29th, 2022
754
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.14 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class Node {
  5.     Node left;
  6.     Node right;
  7.     int data;
  8.    
  9.     Node(int data) {
  10.         this.data = data;
  11.         left = null;
  12.         right = null;
  13.     }
  14. }
  15.  
  16. class Solution {
  17.  
  18.     /*
  19.    
  20.     class Node
  21.         int data;
  22.         Node left;
  23.         Node right;
  24.     */
  25.     public static void topView(Node root) {
  26.       int shift = 0;
  27.       int level = 0;
  28.       LinkedHashMap<Node, Integer> nodeLevel = new LinkedHashMap<>();
  29.       LinkedHashMap<Integer, Node> nodeShift = new LinkedHashMap<>();
  30.      
  31.       LinkedList<Node> lefts = new LinkedList<>();      
  32.       LinkedList<Integer> leftLevel = new LinkedList<>();
  33.       LinkedList<Integer> leftShift = new LinkedList<>();
  34.      
  35.       Node current = root;
  36.       Node other;
  37.      
  38.       while (true) {
  39.           //System.out.println(current.data);
  40.          
  41.           if (current.left != null) {
  42.               lefts.add(current.left);
  43.               leftLevel.addLast(level + 1);
  44.               leftShift.addLast(shift - 1);
  45.           }
  46.          
  47.           if (!nodeShift.containsKey(shift)) {
  48.               nodeShift.put(shift, current);
  49.               nodeLevel.put(current, level);
  50.           } else {
  51.               other = nodeShift.get(shift);
  52.               if (level < nodeLevel.get(other)) {
  53.                   nodeShift.put(shift, current);
  54.                   nodeLevel.remove(other);
  55.                   nodeLevel.put(current, level);
  56.               }
  57.           }
  58.          
  59.           if (current.right == null) {
  60.               if (lefts.isEmpty()) {
  61.                   break;
  62.               }
  63.               current = lefts.getLast();
  64.               level = leftLevel.getLast();
  65.               shift = leftShift.getLast();
  66.               lefts.removeLast();
  67.               leftLevel.removeLast();
  68.               leftShift.removeLast();
  69.               continue;
  70.           }
  71.          
  72.           current = current.right;
  73.           level++;
  74.           shift++;
  75.       }
  76.      
  77.       List<Map.Entry<Integer, Node>> nodes = new ArrayList<>(nodeShift.entrySet());
  78.      
  79.       Collections.sort(nodes, new Comparator<Map.Entry<Integer, Node>>() {
  80.           public int compare(Map.Entry<Integer, Node> a, Map.Entry<Integer, Node> b) {
  81.               return a.getKey() - b.getKey();
  82.           }
  83.       });
  84.      
  85.       nodes.forEach(i -> System.out.print(i.getValue().data + " "));
  86.      
  87.     }
  88.    
  89.  
  90.     public static Node insert(Node root, int data) {
  91.         if(root == null) {
  92.             return new Node(data);
  93.         } else {
  94.             Node cur;
  95.             if(data <= root.data) {
  96.                 cur = insert(root.left, data);
  97.                 root.left = cur;
  98.             } else {
  99.                 cur = insert(root.right, data);
  100.                 root.right = cur;
  101.             }
  102.             return root;
  103.         }
  104.     }
  105.  
  106.     public static void main(String[] args) {
  107.         Scanner scan = new Scanner(System.in);
  108.         int t = scan.nextInt();
  109.         Node root = null;
  110.         while(t-- > 0) {
  111.             int data = scan.nextInt();
  112.             root = insert(root, data);
  113.         }
  114.         scan.close();
  115.         topView(root);
  116.     }  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement