Guest User

Untitled

a guest
Dec 12th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. package br.com.uol.ps.so.api;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8.  
  9. /**
  10. * @author Julio Falbo
  11. * @version $Revision: $<br/>
  12. * $Id: $
  13. * @since 12/12/18 09:17
  14. */
  15. public class Main {
  16.  
  17. static List<Tree> database = new ArrayList<>();
  18.  
  19. public static void main(String[] args) {
  20. createTree(null, false, true);
  21. createTree(1, false, true);
  22. createTree(3, true, false);
  23. changeParent(5, 4);
  24. }
  25.  
  26. @Data
  27. @AllArgsConstructor
  28. static
  29. class Tree {
  30.  
  31. Integer id;
  32.  
  33. Integer idParent;
  34.  
  35. Integer idRight;
  36.  
  37. Integer idLeft;
  38. }
  39.  
  40. private static void createTree(Integer parentId, Boolean hasRight, Boolean hasLeft) {
  41. final Tree root = new Tree(database.size() + 1, parentId, null, null);
  42. database.add(root);
  43. if (hasRight) {
  44. final Tree right = new Tree(database.size() + 1, root.getId(), null, null);
  45. database.add(right);
  46. database.get(root.getId() - 1).setIdRight(right.getId());
  47. }
  48. if (hasLeft) {
  49. final Tree left = new Tree(database.size() + 1, root.getId(), null, null);
  50. database.add(left);
  51. database.get(root.getId() - 1).setIdLeft(left.getId());
  52. }
  53. if (parentId != null) {
  54. final Tree tree = database.get(parentId - 1);
  55. insertNodeInEmptySpace(tree, root.getId());
  56. }
  57. }
  58.  
  59. private static void insertNodeInEmptySpace(final Tree tree, final Integer id) {
  60. if (tree.getIdLeft() != null && tree.getIdRight() != null) {
  61. throw new RuntimeException("Parent tree is full");
  62. }
  63. if (tree.getIdLeft() == null) {
  64. tree.setIdLeft(id);
  65. } else if (tree.getIdRight() == null) {
  66. tree.setIdRight(id);
  67. }
  68. }
  69.  
  70. private static void changeParent(Integer currentTreeId, Integer newParentId) {
  71. final Tree currentTree = database.get(currentTreeId - 1);
  72.  
  73. final Tree oldParent = database.get(currentTree.getIdParent() - 1);
  74. if (oldParent.getIdLeft() != null && oldParent.getIdLeft().equals(currentTreeId)) {
  75. oldParent.setIdLeft(null);
  76. }
  77. if (oldParent.getIdRight() != null && oldParent.getIdRight().equals(currentTreeId)) {
  78. oldParent.setIdRight(null);
  79. }
  80.  
  81. final Tree newParent = database.get(newParentId - 1);
  82. insertNodeInEmptySpace(newParent, currentTreeId);
  83.  
  84. currentTree.setIdParent(newParentId);
  85. }
  86.  
  87. }
Add Comment
Please, Sign In to add comment