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

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

22.11.2016, 21:33. Показов 902. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru