Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167

Деревья

07.12.2013, 21:13. Показов 772. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сайт информатикс. Задание Бинарное дерево (вставка, поиск) проходит все ОК
Задание Бинарное дерево (вставка, поиск, удаление) 4 теста ок, остальное фейл.. что то не так с удалением.
Помогите разобраться)
Кликните здесь для просмотра всего текста
DELETE n — если указанное число есть в дереве, удалять его и выводить слово «DONE», если нет — оставлять дерево как было и выводить слово «CANNOT». При удалении элемента, имеющего два сына, обязательно обменивать значение с максимальным элементом левого поддерева.

Кликните здесь для просмотра всего текста
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
import java.util.Scanner;
 
 
 class test {
 
    public static void main(String[] args) {
        BinTree<Integer> t = new BinTree<Integer>();
        Scanner in = new Scanner(System.in);
        String line = "";
        int val = 0;
        while(in.hasNext()){
            line = in.next();
            
            if (line.equals("ADD")){
                val = in.nextInt();
                if (t.search(val))
                    System.out.println("ALREADY");
                else
                {
                t.add(val);
                System.out.println("DONE");
                }
                
            }
            
            if (line.equals("SEARCH")){
                val  = in.nextInt();
                if (t.search(val))
                    System.out.println("YES");
                else
                    System.out.println("NO");
            }
            
            if (line.equals("PRINTTREE")){
                t.print();
            }
            
            if (line.equals("DELETE")){
                val = in.nextInt();
                if (t.search(val)){
                    t.delete(val);
                    System.out.println("DONE");
                }
                else
                    System.out.println("CANNOT");
            }
        }
    
        
 
    }
 
 public static class BinTree<T extends Number>{
    //
    private Node root; 
    
    class Node{
        
        private T value;
        private Node left;
        private Node right;
        private int counter; 
        
        Node(T val, int N){
            this.value = val;
            this.counter = N;
        }   
    }   
    
    public int size(){
        return size(root);
    }
        
    private int size(Node x){
        if (x == null)
            return 0;
        else
            return x.counter;
    }
    
    public void add(T val){
        
        root = insert(root,val);
    }
    
    public T max(){
        return max(root).value;
    }
    
    public Node max(Node x){
        if (x.right == null ) return x;
        return max(x.right);
    }
    public T min(){
        return min(root).value;
    }
    
    public Node min(Node x){
        
        if (x.left == null) return x;
        return min(x.left);
        
    }
    
    private Node insert(Node x,T val){
        
        if (x == null)
            return new Node(val,1);
        else if (search(val)) return x;
        if (val.doubleValue() < x.value.doubleValue()){
            x.left = insert(x.left,val);
        }
        else
        {
            x.right = insert(x.right,val);
        }
        
        x.counter = size(x.left) + size(x.right) +1;
        
        return x;
    }
    
    public void delete(T val){
        
        root = delete(root,val);
        
    }
    //делейт по узлу чи по елементу
    private Node delete(Node x,T val){
        
        if (x == null ) return null;
        if (val.doubleValue() < x.value.doubleValue())
            x.left = delete(x.left,val);
        else
        if (val.doubleValue() > x.value.doubleValue())
            x.right = delete(x.right,val);
        else
            {   
                if (x.right == null) return x.left;
                if (x.left == null) return x.right;
                Node t = x;
                x = min(t.right);
                x.right = deleteMin(t.right);
                x.left = t.left;
            }
        x.counter = size(x.left) + size(x.right) +1;
        return x;
    }
    
    public void deleteMin(){
        root = deleteMin(root);
    }
    private Node deleteMin(Node x) {
        
        if (x.left == null) return x.right;
        x.left = deleteMin(x.left);
        x.counter = size(x.left)+ size(x.right) +1;
        return x;
    }
    
    public void print(){
        print(root,0);
    }
    private void print(Node x, int level){
        if (x == null) return;
        else
        {
        print(x.left,level +1);
        for (int i =0; i< level;i++)
            System.out.print(".");
            System.out.println(""+x.value);
        print(x.right,level +1);
        }
    }
    
    public boolean search(T val){
         return (search(root,val) == null)? false:true; 
    }
    private T search(Node x,T val){
        if (x == null) {
            return null;
        }
            
        if (val.doubleValue() > x.value.doubleValue() ){
//          System.out.println(val.doubleValue() +" > "+ x.value);
            return search(x.right,val);
        }
        else 
        if (val.doubleValue() < x.value.doubleValue() ){
//          System.out.println(val.doubleValue() +" < "+ x.value);
            return search(x.left,val);
        }
        else{
//          System.out.println(val.doubleValue() +" = "+ x.value);
            return x.value;
        }
    }
}
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2013, 21:13
Ответы с готовыми решениями:

Курсач по теме: Структуры данных. Двоичные деревья поиска. Красно-черные деревья
Здравствуйте, я первокурсник, преподавателя по информатике месяца 2 не было, потом появился, дал курсач, пару занятий провел и всё. Не...

Деревья
Программа написана на яве, критерии по заданию я выложил. Проблема, не могу скомпилировать, и собрать в jar, умные люди помогите и...

Деревья
Есть класс бинарного дерева public class Tree { protected boolean root; protected boolean perens; protected int me; ...

2
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
17.12.2013, 10:44
вы уверены, что задание состоит в том, чтобы заюзать библиотеку?
1
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
17.12.2013, 10:53  [ТС]
проблема в том что не правильно удаляет когда два сына
я пытался что то сделать, но не получилось .. не хватает знаний немножко
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2013, 10:53
Помогаю со студенческими работами здесь

Деревья
Всем привет, напишите полностью,буду очень признателен, если можно с комментариями. В заданном двоичном дереве поиска для целых чисел...

Деревья(бинарные)
Всем привет. Сегодня препод пригвоздил меня к стенке лабой по двоичному бинарному дереву, а точнее мне нужно добыть навык работы с...

Деревья в Java
Помогите с заданием. Подсчитать количество узлов на каждом уровне дерева

Разветвленные деревья
Доброго времени суток. Есть одна небольшая задача: используя уже созданные классы Tree (модель для JTree) и Node (универсальный класс для...

Деревья: обход, структура
Господа, в общем, мне нужно сделать дерево, и вот столкнулся со следующим вопросом: можно ли как-нибудь стандартными способами сравнить...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru