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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
olegos15
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 50
#1

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

30.10.2016, 13:31. Просмотров 106. Ответов 0
Метки нет (Все метки)

Есть задание в котором нужно создать бинарное дерево поиска з заданими ключами и значениями которые нужно ввести с клавы удалить из него буквосоединение "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);
}
 }
и так проблема с графическим виводом в консоль и с вводом
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2016, 13:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарное дерево поиска(удаление елемента) (C++):

Бинарное дерево поиска (удаление, добавление элемента) - C++
Задачи В Бинарном дереве поиска 1)введено с клавиатуры значение, если существует узел с таким значением, он удаляется; 2) с...

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру - C++
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Бинарное дерево поиска - C++
Помогите пожалуйста.. Нужна программа &quot;бинарные деревья поиска&quot;.. и если можно объяснение.. спасибо заранее...

Бинарное дерево поиска - C++
Решил написать бинарное дерево поиска, но что-то пошло не так, дерево не выводиться не понимаю почему. Вот весь код: #include...

Бинарное дерево поиска - C++
Вот задали лабораторною работу. Сделал бинарное дерево поиска. Выдает ошибку &quot;Что послан сигнал от операционной системы на завершение...

Бинарное дерево поиска - C++
#include &lt;iostream&gt; using namespace std; struct node { int key; node *left; node *right; node *p;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2016, 13:31
Привет! Вот еще темы с ответами:

Бинарное дерево поиска C++ - C++
+Доброго времени суток! У меня есть задание:создать картотеку,в ней указать тип магазина,номер магазина,ключ,и адрес магазина.Такое...

Бинарное дерево поиска - C++
В текстовом файле содержится произвольный текст. Построить на его основе бинарное дерево поиска, каждый узел которого содержит слово....

Бинарное дерево поиска - C++
Давайте рассмотрим некоторый пример Допустим есть числа от 0 до 99 которые добавляются в бинарное дерево Элементы в бинарное дерево...

Бинарное дерево поиска - C++
Дали такую задачу: Дан набор попарно не равных целых чисел, по ним строится бинарное дерево поиска. Нужно осуществить обход дерева и...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru