Форум программистов, компьютерный форум CyberForum.ru

Бинарное дерево поиска(удаление елемента) - C++

Восстановить пароль Регистрация
 
olegos15
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 50
30.10.2016, 13:31     Бинарное дерево поиска(удаление елемента) #1
Есть задание в котором нужно создать бинарное дерево поиска з заданими ключами и значениями которые нужно ввести с клавы удалить из него буквосоединение "ED" и вивести ето в консоль в виде дерева например
ED
/ \
EE EF
/ \ \
DS DD DE
и так дальше вместо вывода в виде
ED EE ES EK итд
пограму поиска и удаления написал но если задавать елементы через в коде через put елементы удаляются а если через сканер то нет вот код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package lab5TA;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
 
public class BinTree<K extends Comparable, V> {
 private int size;
 static int num;
 private StringBuilder inString;
 private class Node {
 K key;
 V value; 
 Node right, left;
 Node k4d;
public Node(K key, V value) {
this.key = key;
this.value = value;}}
  private Node root;
private static Scanner input;
  
 private Node find(K key) {
     if (root == null) {
     return null;    }
     Node iterator = root; 
     Node required = root; 
     while (iterator != null) { 
     required = iterator; 
     if (key.compareTo(iterator.key) > 0) {
     iterator = iterator.right;
     } else if (key.compareTo(iterator.key) < 0) {
     iterator = iterator.left;
     } else {
     iterator = null;}}
     return required;}
 public void put(K key, V value) {
     Node node = new Node(key, value); 
     if (root == null) {
     root = node;return; }
     Node parent = find(key);
     if (key.compareTo(parent.key) > 0) {
     parent.right = node;
     } else if (key.compareTo(parent.key) < 0) {
     parent.left = node;
     } else {
     parent.value = node.value;} size++; }
 public int getSize() {
     return size;
    }
 public V get(K key) {
     Node required = find(key);
     return required.key.compareTo(key) == 0 ? required.value : null;}
 private Node getSuccessor(Node removableRight) { 
      if (removableRight.left == null) {
      return removableRight; 
      }
      Node iterator = removableRight;
      Node successor = removableRight; 
      Node successorParent = removableRight; 
      while (iterator != null) {
    
      successorParent = successor;
      successor = iterator;
      iterator = iterator.left;
     }
      successorParent.left = successor.right; 
     
      successor.right = removableRight; 
      return successor;
     }
 public boolean remove(K key) {
     Node removable = root;
     Node parent = root; 
     boolean isLeft = true; 
     while (key.compareTo(removable.key) != 0) { 
     parent = removable;
     if (key.compareTo(removable.key) < 0) {
     removable = removable.left;
     isLeft = true;
     } else if (key.compareTo(removable.key) > 0) {
     removable = removable.right;
     isLeft = false;}
     if (removable == null) {
     return false; }}
     if (removable.left == null && removable.right == null) {
     if (removable == root) {
     root = null; 
     } else if (isLeft) {
     parent.left = null;
     } else {
     parent.right = null;}}
     else {
         Node successor = getSuccessor(removable.right); 
         if (removable == root) { 
        root = successor;
         }
        
        else if (isLeft) {
         parent.left = successor;
         } else {
         parent.right = successor;
         }
         successor.left = removable.left; 
        }
         size--; 
         return true; 
    }
 private String walk(Node node) {
     if (node != null) {
     walk(node.left);
     inString.append(node.value + " "); 
     walk(node.right);
     }
     return inString.toString();
    }
 public String toString() {
     inString = new StringBuilder();
     return walk(root);
    }
 public void deleteel(Node node, V value){
     if (node !=null){
         deleteel(node.left,value);
         if (node.value == value) 
            remove(node.key);
         deleteel(node.right,value);
     }
 
    
 }
 
 public void delete(V value){
     deleteel(root, value);
 
 }
public static void main(String args[]) throws IOException{ int k;
String S;
    BinTree<Integer, String> tree = new BinTree<>();
    input = new Scanner(System.in);
    for(int i=0;i<8;i++){
 
    tree.put(input.nextInt(), input.next());}
/*  tree.put(70, "ED");
    tree.put(90, "EE");
    tree.put(43, "EF");
    tree.put(19, "AD");
    tree.put(37, "DF");
    tree.put(92, "FD");
    tree.put(85, "DF");
    tree.put(107, "SS");*/
    System.out.println("Елемнти дерева:");
    System.out.println(tree);
    System.out.println("Елементи дерева без заданого вузла:");
    tree.delete("ED");
    
    System.out.println(tree);
}
 }
и так проблема с графическим виводом в консоль и с вводом
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2016, 13:31     Бинарное дерево поиска(удаление елемента)
Посмотрите здесь:

C++ Бинарное дерево поиска знаков зодиака
C++ Бинарное дерево, удаление элемента
C++ Вставить новый элемент в бинарное дерево поиска
C++ Структура, по строкам построить бинарное дерево поиска
Бинарное дерево поиска (удаление, добавление элемента) C++
Бинарное дерево поиска (определить максимальную глубину) C++
Бинарное дерево поиска.Вывести слова с тремя гласными C++
Бинарное дерево поиска C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 11:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru