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

AVL дерево: операция нахождения минимального элемента

22.11.2016, 21:33. Показов 893. Ответов 1
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Написал програму организурующую АВЛ дерево на JAVA постала задача в поиске минимального елемента но к сожалению виводит адрес в оперативке вместо самого Value вот код
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
package lab6_TA;
 
 
class AVL <Key extends Comparable<Key>, Value> {
    public class Node {
        private int h;
        private int balance;
        Key key;
        Value value;
        private Node left, right, father;
        public Node (Key key, Value value, Node father) {
            this.key = key;
            this.value = value;
            this.left = this.right = null;
            this.father = father;
            this.h = 1;
            this.balance = 0;}
        public Node next(){
            return getHigherNode(this.key);}
        public Node previus(){
            return getLowerNode(this.key);}}
    public Node root;
    private Node getHigherNode(Key key) {
        Node p = root;
        while (p != null) {
            int cmp = key.compareTo(p.key);
            if (cmp < 0) {
                if (p.left != null)
                    p = p.left;
                else
                    return p;} else {
                if (p.right != null) {
                    p = p.right;} else {
                    Node father = p.father;
                    Node ch = p;
                    while (father != null && ch == father.right) {
                        ch = father;
                        father = father.father;}
                    return father;}}}
        return null;}
    public Node getMin(){
        return min(root);
        
    }
    private Node getLowerNode(Key key) {
        Node p = root;
        while (p != null) {
            int cmp = key.compareTo(p.key);
            if (cmp > 0) {
                if (p.right != null)
                    p = p.right;
                else
                    return p;} else {
                if (p.left != null) {
                    p = p.left;} else {
                    Node father = p.father;
                    Node ch = p;
                    while (father != null && ch == father.left) {
                        ch = father;
                        father = father.father;}
                    return father;}}}
        return null;}
     public Node getFirstNode(){
        return min(root);}
     public Node getLastNode(){
        return max(root);}
     private int height(Node x, Node y){
        if(x == null && y == null) return 0;
        else if(x == null) return y.h;
        else if(y == null) return x.h;
        else return Math.max(x.h, y.h);}
     private int balance(Node x, Node y){
        if(x == null && y == null) return 0;
        else if(x == null) return - y.h;
        else if(y == null) return x.h;
        else return x.h - y.h;}
    private Node add (Node node,Key key, Value value, Node father){
        if (node == null){
            Node newnode = new Node(key,value, father);
            return newnode;}
        int compareResult = key.compareTo(node.key);
        if (compareResult > 0){node.right = add(node.right, key, value, node); node.h = height(node.left, node.right) + 1;}
        else if(compareResult < 0){node.left = add(node.left, key, value, node); node.h = height(node.left, node.right) + 1;}else{
            node.value = value;}
        node.balance = balance(node.left, node.right);
        if(node.balance == -2){
            node = leftRotation(node);
        }else if(node.balance == 2){
            node = rightRotation(node);}
        return node;}
     private Node leftRotation(Node node) {
        if(node.right.right == null && node.right.left != null){
            node.right = rightRotation(node.right);
            node = leftRotation(node);
        }else if(node.right.left == null || node.right.left.h <= node.right.right.h){
            Node newnode = node.right;
            newnode.father = node.father;
            node.right = newnode.left;
            if(node.right != null)
                node.right.father = node;
            node.h = height(node.left, node.right)+1;
            node.father = newnode;
            node.balance = balance(node.left, node.right);
            newnode.left = node;
            node = newnode;
            node.balance = balance(node.left, node.right);
            node.h = height(node.left, node.right)+1;}else{
            node.right = rightRotation(node.right);
            node = leftRotation(node);}
        return node;}
    private Node rightRotation(Node node){
        if(node.left.right != null && node.left.left == null){
            node.left = leftRotation(node.left);
            node = rightRotation(node);
        }else if(node.left.right == null || node.left.right.h <= node.left.left.h){
            Node newnode = node.left;
            newnode.father = node.father;
            node.left = newnode.right;
            if(node.left != null)
                node.left.father = node;
            node.h = height(node.left, node.right)+1;
            node.father = newnode;
            node.balance = balance(node.left, node.right);
            newnode.right = node;
            node = newnode;
            node.balance = balance(node.left, node.right);
            node.h = height(node.left, node.right)+1;}else{
            node.left = leftRotation(node.left);
            node = rightRotation(node);}
        return node;}
   public void add(Key key, Value value) {
        root = add(root, key, value, null);}
     private Node delete(Node node, Key key){
        if(node == null) return null;
        int compareResult = key.compareTo(node.key);
        if(compareResult > 0){
            node.right = delete(node.right, key);}else if(compareResult < 0){
            node.left = delete(node.left, key);}else{
            if(node.right == null && node.left == null){
                node = null;
            }else if(node.right == null){
                node.left.father = node.father;
                node = node.left;
            }else if(node.left == null){
                node.right.father = node.father;
                node = node.right;}else{
                if(node.right.left == null){
                    node.right.left = node.left;
                    node.right.father = node.father;
                    node.right.father = node.father;
                    node.left.father = node.right;
                    node = node.right;}else{ 
                    Node res = min(node.right);
                    node.key = res.key;
                    node.value = res.value;
                    delete(node.right, node.key);}}}
        if(node != null) {
            node.h = height(node.left, node.right) + 1;
            node.balance = balance(node.left, node.right);
            if (node.balance == -2) {
                node = leftRotation(node);
            } else if (node.balance == 2) {
                node = rightRotation(node);}}
        return node;}
 public void delete(Key key) {
        root = delete(root, key);}
  public Key minKey(){
        return min(root).key;}
   public Key maxKey(){
        return max(root).key;}
  public Node min(Node node){
        if(node.left == null)
      return node;
        return min(node.left);}
   private Node max(Node node){
        if(node.right == null) return node;
        return min(node.right);}
    private Value get(Node node, Key key){
        if(node == null) return null;
        int compareResult = key.compareTo(node.key);
        if(compareResult == 0){
            return node.value;
        }else if(compareResult > 0){
            return get(node.right, key);
        }else{return get(node.left, key);}}
 public Value get(Key key) {
        return get(root, key);}
   private void print(Node node, int level) {
        if (node != null) {
            print(node.right,level+1);
            for (int i=0;i<level;i++) {
                System.out.print("\t");}}}
    public void print() {
        print(root,0);}
   public static void main(String[] args){
        AVL<Integer, Integer> tree = new AVL<>();
        tree.add(10,10);
        tree.print();
        tree.add(11,11);
        tree.print();
        tree.add(15,12);
        tree.print();
        tree.add(13,12);
        tree.print();
        tree.add(16,12);
        tree.print();
        tree.add(12,12);
        tree.print();
        tree.add(3,2);
        tree.print();
        tree.add(1,1);
        tree.print();
        tree.add(0,1);
        tree.print();
        tree.add(2,1);
        tree.print();
       
        for(AVL.Node e = tree.getFirstNode(); e != null; e = e.next()){
            System.out.println(e.key);
               
        }
        
     System.out.println(tree.getMin());
    }}
пробую получить значение кореня дерева через метод min на прямую не виходит ибо тип Node но даже получая значение root появляется просто адрес на оперативку вот результат компиляции:
1
2
3
10
11
12
13
15
16
lab6_TA.AVL$Node@15db9742
как видно в последней строке ето не значчение.
Извиняюсь за карявое исполнение русского сам не русский поетому много граматичиских правок надо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2016, 21:33
Ответы с готовыми решениями:

Разработать и испытать функцию нахождения минимального элемента массива и его индекса
Разработать и испытать функцию нахождения минимального элемента массива и его индекса. Помогите...

Графическое представление AVL дерева
Пытаюсь реализовать графическое представление AVL дерева. Swing знаю более 3-х дней. Понимаю...

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

1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.11.2016, 23:39
оформляй код по-человечески - нихрена не читается. В классе Node опиши метод toString.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2016, 23:39
Помогаю со студенческими работами здесь

Ищу класс реализующий 2-3 дерево и операции с ним
так-же не прочь найти бы какой-нибудь визуализатор этой структуры данных.

Минимальное количество операций сравнения при поиске элемента в массиве
Здравствуйте! Такой вопрос: за какое минимальное количество операций сравнения происходит поиск...

Нахождение минимального и максимального элемента массива
помогите найти ошибку пожалуйста!!!почему не все считает правильно? import java.util.Arrays;...

Проблема в нахождении минимального элемента среди максимальных элементов столбцов матрицы
Здравствуйте, есть проблема. Я уже несколько часов пытаюсь докопаться до истины, но чувствую, что...

Неправильно работает код нахождения минимального значения среди чисел
Начал изучать Java. И столкнулся вот с такой вот проблемой... Немного непонятно, код работает, но...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru