Advertisement
Guest User

Untitled

a guest
Oct 30th, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.19 KB | None | 0 0
  1. package btree;
  2.  
  3. import java.util.*;
  4.  
  5. class Node {
  6. int key;
  7. int height;
  8.  
  9. Node left;
  10. Node right;
  11. Node (int newKey) {
  12. this.key = newKey;
  13. height = 1;
  14. left = null;
  15. right = null;
  16. }
  17. }
  18.  
  19. public class BTree {
  20. static Node root;
  21. int deep = 0;
  22.  
  23. public void addNode(int key) {
  24. Node newNode = new Node(key);
  25. newNode.height = 1;
  26.  
  27. if (root == null) {
  28. root = newNode;
  29. } else {
  30. Node focusNode = root;
  31.  
  32. while (true) {
  33. if (key < focusNode.key) {
  34. focusNode.height = Math.max( getHeight(focusNode.left) + 1, getHeight(focusNode.right) ) + 1;
  35. if (focusNode.left == null) {
  36. focusNode.left = newNode;
  37. return;
  38. }
  39. //focusNode.height = Math.max( getHeight(focusNode.left) + 1, getHeight(focusNode.right) ) + 1;
  40. focusNode = focusNode.left;
  41. } else {
  42. focusNode.height = Math.max( getHeight(focusNode.left), getHeight(focusNode.right) + 1 ) + 1;
  43. if (focusNode.right == null) {
  44. focusNode.right = newNode;
  45. //focusNode.height = Math.max( getHeight(focusNode.left), getHeight(focusNode.right) + 1 ) + 1;
  46. return;
  47. } else {
  48. //focusNode.height = Math.max( getHeight(focusNode.left), getHeight(focusNode.right) + 1 ) + 1;
  49. focusNode = focusNode.right;
  50. }
  51. }
  52. }
  53. }
  54. }
  55.  
  56. public void add(Node root, int key) {
  57. Node newNode = new Node(key);
  58. if (root == null) {
  59. root = newNode;
  60. return;
  61. }
  62. Node focusNode = root;
  63. if (key < focusNode.key) {
  64. if (focusNode.left == null) {
  65. focusNode.left = newNode;
  66. } else {
  67. add(focusNode.left, key);
  68. }
  69. } else {
  70. if (focusNode.right == null) {
  71. focusNode.right = newNode;
  72. } else {
  73. add(focusNode.right, key);
  74. }
  75. }
  76. }
  77.  
  78.  
  79.  
  80. public int getHeight(Node n) {
  81. return ( (n == null) ? 0 : n.height );
  82. }
  83.  
  84. public Node rem(int key) {
  85. if (root == null) return null;
  86. Node focusNode = root;
  87. Node parent = null;
  88.  
  89. Boolean flagLeft = null;
  90. System.out.println(flagLeft);
  91.  
  92. while (focusNode.key != key) { //Поиск нужного узла
  93. if (key < focusNode.key) {
  94. parent = focusNode;
  95. focusNode = focusNode.left;
  96. flagLeft = true;
  97. } else {
  98. parent = focusNode;
  99. focusNode = focusNode.right;
  100. flagLeft = false;
  101. }
  102. if (focusNode == null) {
  103. return null;
  104. }
  105. }
  106.  
  107. if (focusNode.left == null) { //Левый потомок пуст
  108. if (focusNode.right == null) { //Оба потомка пусты
  109. if (flagLeft)
  110. parent.left = null;
  111. else
  112. parent.right = null;
  113. return focusNode; //
  114. }
  115.  
  116. parent.key = focusNode.key;
  117. parent.right = null;
  118. return focusNode; //
  119. } else if (focusNode.right == null ) { // Только правый потомок пуст
  120. focusNode.key = focusNode.left.key;
  121. focusNode.left = null;
  122. /*parent.key = focusNode.key;
  123. parent.left = null;*/
  124. return focusNode;
  125. } else { //Оба потомка присутствуют
  126. Node temp = focusNode.right;
  127. while (temp.left != null) {
  128. parent = temp;
  129. temp = temp.left;
  130. }
  131. focusNode.key = temp.key;
  132. parent.left = null;
  133. return temp;
  134. } //
  135. }
  136.  
  137. public void preorder(Node focusNode) {
  138. if (root == null)
  139. return;
  140. for (int i = 0; i < deep; i++) {
  141. System.out.print("_");
  142. }
  143. System.out.println(focusNode.key + "(" + focusNode.height + ")");
  144.  
  145. ++deep;
  146. if (focusNode.left != null) {
  147. this.preorder(focusNode.left);
  148. --deep;
  149. }
  150.  
  151. if (focusNode.right != null) {
  152. this.preorder(focusNode.right);
  153. --deep;
  154. }
  155. }
  156.  
  157. public static void main(String[] args) {
  158. BTree tree = new BTree();
  159. int d;
  160. Scanner sc = new Scanner(System.in);
  161.  
  162.  
  163.  
  164. while (true) {
  165. System.out.println("Добавить узел: 1");
  166. System.out.println("Удалить узел: 2");
  167. System.out.println("Вывести дерево: 3");
  168. System.out.println("Выход: 0");
  169.  
  170. d = sc.nextInt();
  171.  
  172. if (d == 1)
  173. while(true) {
  174. System.out.println("Введите узел: ");
  175. int x = sc.nextInt();
  176. if (x == 0) break;
  177. tree.add(root, x);
  178. }
  179. if (d == 2) {
  180. System.out.println("Введите значение удаляемого узла: ");
  181. tree.rem(sc.nextInt());
  182. continue;
  183. }
  184. if (d == 3) {
  185. System.out.println("Вывод дерева:");
  186. tree.preorder(root);
  187. }
  188. if (d == 0) {
  189. return;
  190. }
  191. }
  192. }
  193.  
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement