Skip to content
This repository has been archived by the owner on Dec 28, 2022. It is now read-only.

Commit

Permalink
Merge pull request #202 from polis-vk/homework7
Browse files Browse the repository at this point in the history
Homework 7
  • Loading branch information
ysp2000 committed Nov 8, 2022
2 parents 1ad7ea0 + 25dfbc7 commit 0831f19
Show file tree
Hide file tree
Showing 4 changed files with 489 additions and 0 deletions.
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,3 +152,39 @@ $ git checkout -b <my-branch-for-part6> fe2f22405db89b95bf9b5a034f95daf4c61e29ab
```commandline
./gradlew test
```

## ДЗ 7. RB-tree. Дедлайн 15.11.2022 18:29:59

‼️ Ветка с решением должна ответвляться от коммита [TODO](https://github.com/polis-vk/2022-ads/commit/TODO):

```bash
$ git fetch upstream
$ git checkout -b <my-branch-for-part7> TODO
```

Реализовать Left-Leaning Red-Black Tree в `company.vk.polis.ads.bst.RedBlackBinarySearchTree`, чтобы выполнялись тесты `company.vk.polis.ads.bst.RedBlackBinarySearchTreeTest`.

Решения с использованием библиотечных структур данных
(`TreeMap`, которая на самом деле работает на красно-черных деревьях из Кормена) не принимаются.

Основные методы:
* `Value get(Key key)` - возвращает значение по заданному ключу или `null`, если такого ключа нет
* `void put(Key key, Value value)` - сохраняет заданное значение по указанному ключу
* `Value remove(Key key)` - удаляет заданный ключ (и связанное с ним значение, возвращая его)

Методы, основанные на порядке ключей:
* `Key min()` - возвращает минимальный ключ или `null`, если структура пустая
* `Value minValue()` - возвращает значение, ассоцирированное с минимальным ключом, или `null`, если структура пустая
* `Key max()` - возвращает максимальный ключ или `null`, если структура пустая
* `Value maxValue()` - возвращает значение, ассоцирированное с максимальным ключом, или `null`, если структура пустая
* `Key floor(Key key)` - возвращает максимальный ключ, меньший либо равный заданному, или `null`, если такого нет
* `Key ceil(Key key)` - вовзращает минимальный ключ, больший либо равный заданному, или `null`, если такого нет

Служебные методы:
* `int size()` - вовзращает количество узлов в дереве
* `int height()` - возвращает высоту дерева (достаточно простой рекурсивной реализации, хранить высоту в узле не обязательно)

Локально запускать тесты можно через
```commandline
./gradlew test
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package company.vk.polis.ads.bst;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
* LLRB implementation of binary search tree.
*/
public class RedBlackBinarySearchTree<Key extends Comparable<Key>, Value>
implements BinarySearchTree<Key, Value> {

private static final boolean BLACK = false;
private static final boolean RED = true;

private class Node {
Key key;
Value value;
Node left;
Node right;
boolean color;
}

@Nullable
@Override
public Value get(@NotNull Key key) {
throw new UnsupportedOperationException("Implement me");
}

@Override
public void put(@NotNull Key key, @NotNull Value value) {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Value remove(@NotNull Key key) {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Key min() {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Value minValue() {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Key max() {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Value maxValue() {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Key floor(@NotNull Key key) {
throw new UnsupportedOperationException("Implement me");
}

@Nullable
@Override
public Key ceil(@NotNull Key key) {
throw new UnsupportedOperationException("Implement me");
}

@Override
public int size() {
throw new UnsupportedOperationException("Implement me");
}

/**
* Только для тестов
* Саму высоту хранить не обязательно, достаточно сделать рекурсивное вычисление
*/
@Override
public int height() {
throw new UnsupportedOperationException("Implement me");
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package company.vk.polis.ads.bst;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -10,6 +11,7 @@
/**
* Basic binary search tree invariants.
*/
@Disabled("Disabled since 7th homework released")
class AvlBinarySearchTreeTest {

BinarySearchTree<String, String> newAvlBst() {
Expand Down
Loading

0 comments on commit 0831f19

Please sign in to comment.