Advertisement
bakhridinova

Untitled

Sep 8th, 2022
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.47 KB | None | 0 0
  1. package com.epam.rd.autocode.bstprettyprint;
  2.  
  3. public class PrintableTreeInstance implements PrintableTree {
  4.  
  5.     private TreeNode treeNode;
  6.  
  7.     @Override
  8.     public void add(int value) {
  9.         TreeNode node = treeNode;
  10.         while (true) {
  11.             if (node == null) {
  12.                 treeNode = new TreeNode(value);
  13.                 break;
  14.             } else {
  15.                 if (node.getValue() < value) {
  16.                     if (node.getLeft() != null) {
  17.                         node = node.getLeft();
  18.                     } else {
  19.                         node.setLeft(new TreeNode(value));
  20.                         break;
  21.                     }
  22.                 }
  23.                 if (node.getValue() > value) {
  24.                     if (node.getRight() != null) {
  25.                         node = node.getRight();
  26.                     } else {
  27.                         node.setRight(new TreeNode(value));
  28.                         break;
  29.                     }
  30.                 }
  31.             }
  32.         }
  33.     }
  34.  
  35.     @Override
  36.     public String prettyPrint() {
  37.         StringBuilder sb = new StringBuilder();
  38.         traverse(treeNode, treeNode, sb, 0);
  39.         return sb.toString();
  40.     }
  41.  
  42.     private void traverse(TreeNode node, TreeNode temp, StringBuilder sb, int space) {
  43.         if (node != null) {
  44.             traverse(node.getRight(), node, sb, space + log10(node.getValue()) + 1);
  45.  
  46.             addSpaces(sb, space);
  47.             addPrePattern(sb, temp, node);
  48.             addPostPattern(sb, node);
  49.  
  50.             traverse(node.getLeft(), node, sb, space + log10(node.getValue()) + 1);
  51.         }
  52.     }
  53.  
  54.     private int log10(int n) {
  55.         int ans = 0;
  56.  
  57.         while (n != 0) {
  58.             ans++;
  59.             n /= 10;
  60.         }
  61.  
  62.         return ans;
  63.     }
  64.  
  65.     private void addSpaces(StringBuilder sb, int spaces) {
  66.         for (int i = 0; i < spaces - 1; i++) {
  67.             sb.append(' ');
  68.         }
  69.     }
  70.  
  71.     private void addPostPattern(StringBuilder sb, TreeNode node) {
  72.         if (node.hasLeft() || node.hasRight()) {
  73.             if (!node.hasLeft()) {
  74.                 sb.append('┘');
  75.             }
  76.  
  77.             if (!node.hasRight()) {
  78.                 sb.append('┐');
  79.             }
  80.             if (node.hasRight() && node.hasLeft()) {
  81.                 sb.append('┤');
  82.             }
  83.         }
  84.         sb.append("\n");
  85.     }
  86.  
  87.     private void addPrePattern(StringBuilder sb, TreeNode preNode, TreeNode node) {
  88.         if (preNode.getRight() == node) {
  89.             sb.append('┌');
  90.         }
  91.  
  92.         if (preNode.getLeft() == node) {
  93.             sb.append('└');
  94.         }
  95.  
  96.         sb.append(node.getValue());
  97.     }
  98.  
  99.     private static class TreeNode {
  100.         private final Integer value;
  101.         private TreeNode left;
  102.         private TreeNode right;
  103.  
  104.         public TreeNode(int value) {
  105.             this.value = value;
  106.         }
  107.  
  108.         public boolean hasLeft() {
  109.             return this.left != null;
  110.         }
  111.  
  112.         public boolean hasRight() {
  113.             return this.right != null;
  114.         }
  115.  
  116.         public Integer getValue() {
  117.             return value;
  118.         }
  119.  
  120.         public TreeNode getLeft() {
  121.             return left;
  122.         }
  123.  
  124.         public TreeNode getRight() {
  125.             return right;
  126.         }
  127.  
  128.         public void setLeft(TreeNode left) {
  129.             this.left = left;
  130.         }
  131.  
  132.         public void setRight(TreeNode right) {
  133.             this.right = right;
  134.         }
  135.     }
  136. }
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement