Advertisement
fatalryuu

b

Dec 19th, 2022
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.64 KB | None | 0 0
  1. package by.it.group151002.shatko.lesson10;
  2.  
  3. import java.util.*;
  4.  
  5. public class TaskB<E> implements NavigableSet<E> {
  6. private int amount = 0;
  7. private int i = 0;
  8. private Node<E> root;
  9. public int compareTo(E o, E nextO) {
  10. return Integer.compare((int)o, (int)nextO);
  11. }
  12. private class Node<E> {
  13. private E data;
  14. private Node<E> leftChild;
  15. private Node<E> rightChild;
  16. private Node<E> parent;
  17.  
  18. public void setLeftChild(Node<E> newNode) {
  19. leftChild = newNode;
  20. }
  21.  
  22. public void setRightChild(Node<E> newNode) {
  23. rightChild = newNode;
  24. }
  25.  
  26. public Node(E data) {
  27. this.data = data;
  28. }
  29. public Node<E> getLeftChild() {
  30. return leftChild;
  31. }
  32.  
  33. public Node<E> getRightChild() {
  34. return rightChild;
  35. }
  36.  
  37. public E getvalue() {
  38. return data;
  39. }
  40. }
  41. //Создайте БЕЗ использования других классов (включая абстрактные)
  42. //аналог дерева TreeSet
  43.  
  44. //Обязательные к реализации методы и конструкторы
  45. public TaskB() {
  46. }
  47.  
  48. @Override
  49. public boolean add(E e) {
  50. Node<E> current = root;
  51. Node<E> prev;
  52. Node<E> newNode = new Node<>(e);
  53. if(!contains(e)) {
  54. if (root == null) {
  55. root = newNode;
  56. root.parent = null;
  57. amount++;
  58. return true;
  59. } else {
  60. while (true) {
  61. prev = current;
  62. if (compareTo(current.getvalue(), e) > 0) {
  63. if (current.leftChild == null) {
  64. current.setLeftChild(newNode);
  65. current.leftChild.parent = current;
  66. amount++;
  67. return true;
  68. }
  69. current = current.getLeftChild();
  70. } else {
  71.  
  72. if (current.rightChild == null) {
  73. current.setRightChild(newNode);
  74. current.rightChild.parent = current;
  75. amount++;
  76. return true;
  77. }
  78. current = current.getRightChild();
  79. }
  80. }
  81. }
  82. }
  83. return false;
  84. }
  85.  
  86. @Override
  87. public boolean remove(Object o) {
  88. Node<E> current = root;
  89. boolean flag=false;
  90. while(!flag && amount>0){
  91. if(current==null) return false;
  92. if(current!=null && compareTo(current.getvalue(),(E)o)>0){
  93. current=current.getLeftChild();
  94. } else
  95. if(current!=null && compareTo(current.getvalue(),(E)o)<0){
  96. current=current.getRightChild();
  97. }
  98. if(current!=null && compareTo(current.getvalue(),(E)o)==0){
  99. flag = true;
  100. }
  101. }
  102. if(current.leftChild==null && current.rightChild==null){
  103. if(current.parent==null){
  104. root=null;
  105. } else
  106. if(current.parent.rightChild==current){
  107. current.parent.rightChild=null;
  108. }else {
  109. current.parent.leftChild = null;
  110. }
  111. amount--;
  112. return true;
  113. }
  114. if(current.leftChild==null || current.rightChild==null){
  115. if(current.leftChild==null){
  116. if(current.parent==null){
  117. root=current.getRightChild();
  118. } else
  119. if(current.parent.leftChild==current){
  120. current.rightChild.parent=current.parent;
  121. current.parent.leftChild=current.rightChild;
  122. } else
  123. if(current.parent.rightChild==current){
  124. current.rightChild.parent=current.parent;
  125. current.parent.rightChild = current.rightChild;
  126. }
  127. }
  128. if(current.rightChild==null){
  129. if(current.parent==null){
  130. root=current.getLeftChild();
  131. } else
  132. if(current.parent!=null && current.parent.rightChild==current){
  133. current.leftChild.parent=current.parent;
  134. current.parent.rightChild=current.leftChild;
  135. } else
  136. if(current.parent!=null && current.parent.leftChild==current){
  137. current.leftChild.parent=current.parent;
  138. current.parent.leftChild = current.leftChild;
  139. }
  140. }
  141. amount--;
  142. return true;
  143. }
  144. if(current.leftChild!=null && current.rightChild!=null){
  145. Node<E> tmp;
  146. tmp=current.getRightChild();
  147. boolean flag1=false;
  148. while(tmp.leftChild!=null){
  149. tmp=tmp.getLeftChild();
  150. flag1=true;
  151. }
  152. if(flag1){
  153. if(tmp.rightChild!=null){
  154. tmp.rightChild.parent=tmp.parent;
  155. tmp.parent.leftChild=tmp.rightChild;
  156. current.data=tmp.data;
  157. }
  158. if(tmp.rightChild==null){
  159. tmp.parent.leftChild=null;
  160. current.data=tmp.data;
  161. }
  162. amount--;
  163. return true;
  164. }
  165. else if(!flag1){
  166. if(tmp.rightChild!=null) {
  167. tmp.rightChild.parent = tmp.parent;
  168. tmp.parent.rightChild = tmp.rightChild;
  169. current.data = tmp.data;
  170. }
  171. if(tmp.rightChild==null){
  172. tmp.parent.rightChild=null;
  173. current.data=tmp.data;
  174. }
  175. amount--;
  176. return true;
  177. }
  178. amount--;
  179. return true;
  180. }
  181. return false;
  182. }
  183.  
  184. void inOrder(Node root, StringBuilder str){
  185. if(root==null){return;}
  186. inOrder(root.leftChild,str);
  187. str.append(root.data);
  188. str.append(", ");
  189. i++;
  190. inOrder(root.rightChild,str);
  191. }
  192.  
  193. @Override
  194. public String toString() {
  195. i=0;
  196. StringBuilder s = new StringBuilder();
  197. s.append('[');
  198. inOrder(root,s);
  199. if (s.length() < 2) {
  200. s.append("]");
  201. } else {
  202. s.delete(s.length()-2, s.length());
  203. s.append("]");
  204. }
  205. return s.toString();
  206. }
  207.  
  208. @Override
  209. public boolean contains(Object o) {
  210. Node<E> current = root;
  211. boolean flag = false;
  212. while (amount > 0) {
  213. if (current == null)
  214. return false;
  215. if (compareTo(current.getvalue(), (E)o) > 0) {
  216. current = current.getLeftChild();
  217. }
  218. if (current != null && compareTo(current.getvalue(), (E)o) < 0) {
  219. current = current.getRightChild();
  220. }
  221. if (current != null && compareTo(current.getvalue(),(E)o) == 0) {
  222. return true;
  223. }
  224. }
  225. return false;
  226. }
  227.  
  228. @Override
  229. public void clear() {
  230. amount = 0;
  231. root = null;
  232. }
  233.  
  234. @Override
  235. public boolean isEmpty() {
  236. return amount == 0;
  237. }
  238.  
  239. @Override
  240. public int size() {
  241. return amount;
  242. }
  243.  
  244. @Override
  245. public E first() {
  246. if (amount > 0) {
  247. Node<E> current = root;
  248. while (current.leftChild != null)
  249. current= current.getLeftChild();
  250. return current.data;
  251. }
  252. else
  253. return null;
  254. }
  255.  
  256. @Override
  257. public E last() {
  258. if (amount > 0) {
  259. Node<E> current = root;
  260. while (current.rightChild != null)
  261. current = current.getRightChild();
  262. return current.data;
  263. }
  264. else
  265. return null;
  266. }
  267.  
  268. /////////////////////////////////////////////////////////////////////////
  269. /////////////////////////////////////////////////////////////////////////
  270. //////// Эти методы реализовывать необязательно ////////////
  271. /////////////////////////////////////////////////////////////////////////
  272. /////////////////////////////////////////////////////////////////////////
  273. @Override
  274. public E lower(E e) {
  275. return null;
  276. }
  277.  
  278. @Override
  279. public Iterator<E> iterator() {
  280. return null;
  281. }
  282.  
  283. @Override
  284. public E floor(E e) {
  285. return null;
  286. }
  287.  
  288. @Override
  289. public E ceiling(E e) {
  290. return null;
  291. }
  292.  
  293. @Override
  294. public E higher(E e) {
  295. return null;
  296. }
  297.  
  298. @Override
  299. public E pollFirst() {
  300. return null;
  301. }
  302.  
  303. @Override
  304. public E pollLast() {
  305. return null;
  306. }
  307.  
  308.  
  309. @Override
  310. public Object[] toArray() {
  311. return new Object[0];
  312. }
  313.  
  314. @Override
  315. public <T> T[] toArray(T[] a) {
  316. return null;
  317. }
  318.  
  319. @Override
  320. public boolean containsAll(Collection<?> c) {
  321. return false;
  322. }
  323.  
  324. @Override
  325. public boolean addAll(Collection<? extends E> c) {
  326. return false;
  327. }
  328.  
  329. @Override
  330. public boolean retainAll(Collection<?> c) {
  331. return false;
  332. }
  333.  
  334. @Override
  335. public boolean removeAll(Collection<?> c) {
  336. return false;
  337. }
  338.  
  339. @Override
  340. public NavigableSet<E> descendingSet() {
  341. return null;
  342. }
  343.  
  344. @Override
  345. public Iterator<E> descendingIterator() {
  346. return null;
  347. }
  348.  
  349. @Override
  350. public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
  351. return null;
  352. }
  353.  
  354. @Override
  355. public NavigableSet<E> headSet(E toElement, boolean inclusive) {
  356. return null;
  357. }
  358.  
  359. @Override
  360. public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
  361. return null;
  362. }
  363.  
  364. @Override
  365. public Comparator<? super E> comparator() {
  366. return null;
  367. }
  368.  
  369. @Override
  370. public SortedSet<E> subSet(E fromElement, E toElement) {
  371. return null;
  372. }
  373.  
  374. @Override
  375. public SortedSet<E> headSet(E toElement) {
  376. return null;
  377. }
  378.  
  379. @Override
  380. public SortedSet<E> tailSet(E fromElement) {
  381. return null;
  382. }
  383.  
  384.  
  385. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement