Naloga 3 WIP
This commit is contained in:
parent
b0ec0d4ec4
commit
1f2ae5b63a
29
naloga3/.gitignore
vendored
Normal file
29
naloga3/.gitignore
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
### IntelliJ IDEA ###
|
||||||
|
out/
|
||||||
|
!**/src/main/**/out/
|
||||||
|
!**/src/test/**/out/
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
bin/
|
||||||
|
!**/src/main/**/bin/
|
||||||
|
!**/src/test/**/bin/
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
### Mac OS ###
|
||||||
|
.DS_Store
|
8
naloga3/.idea/.gitignore
generated
vendored
Normal file
8
naloga3/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
19
naloga3/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
19
naloga3/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPep8Inspection" enabled="true" level="INFORMATION" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="W292" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredIdentifiers">
|
||||||
|
<list>
|
||||||
|
<option value="tests.smoke.test_absences_sliding.TestAbsencesSliding.*" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
6
naloga3/.idea/misc.xml
generated
Normal file
6
naloga3/.idea/misc.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_23" default="true" project-jdk-name="homebrew-23" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
8
naloga3/.idea/modules.xml
generated
Normal file
8
naloga3/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/naloga3.iml" filepath="$PROJECT_DIR$/naloga3.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
naloga3/.idea/vcs.xml
generated
Normal file
6
naloga3/.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
11
naloga3/naloga3.iml
Normal file
11
naloga3/naloga3.iml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
265
naloga3/src/AVLDrevo.java
Normal file
265
naloga3/src/AVLDrevo.java
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
@SuppressWarnings("SuspiciousNameCombination")
|
||||||
|
public class AVLDrevo {
|
||||||
|
static class Item {
|
||||||
|
public int value;
|
||||||
|
public int count;
|
||||||
|
|
||||||
|
public Item(int value) {
|
||||||
|
this.value = value;
|
||||||
|
this.count = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return value + "/" + count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Node {
|
||||||
|
Item item;
|
||||||
|
Node left, right;
|
||||||
|
int height = 1;
|
||||||
|
|
||||||
|
public Node(int value) {
|
||||||
|
item = new Item(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Node root;
|
||||||
|
StringBuilder traversal;
|
||||||
|
|
||||||
|
private int getHeight(Node node) {
|
||||||
|
if (node == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return node.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getBalance(Node node) {
|
||||||
|
if (node == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return getHeight(node.left) - getHeight(node.right);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node rightRotate(Node y) {
|
||||||
|
Node x = y.left;
|
||||||
|
y.left = x.right;
|
||||||
|
x.right = y;
|
||||||
|
y.height = 1 + Math.max(getHeight(y.left), getHeight(y.right));
|
||||||
|
x.height = 1 + Math.max(getHeight(x.left), getHeight(x.right));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node leftRotate(Node x) {
|
||||||
|
Node y = x.right;
|
||||||
|
x.right = y.left;
|
||||||
|
y.left = x;
|
||||||
|
x.height = 1 + Math.max(getHeight(x.left), getHeight(x.right));
|
||||||
|
y.height = 1 + Math.max(getHeight(y.left), getHeight(y.right));
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node minValueNode(Node node) {
|
||||||
|
Node current = node;
|
||||||
|
while (current.left != null) {
|
||||||
|
current = current.left;
|
||||||
|
}
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node balance(Node node) {
|
||||||
|
int balance = getBalance(node);
|
||||||
|
|
||||||
|
if (balance > 1 && getBalance(node.left) >= 0) {
|
||||||
|
return rightRotate(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (balance > 1 && getBalance(node.left) < 0) {
|
||||||
|
node.left = leftRotate(node.left);
|
||||||
|
return rightRotate(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (balance < -1 && getBalance(node.right) <= 0) {
|
||||||
|
return leftRotate(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (balance < -1 && getBalance(node.right) > 0) {
|
||||||
|
node.right = rightRotate(node.right);
|
||||||
|
return leftRotate(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void vstavi(int kljuc) {
|
||||||
|
root = vstavi(root, kljuc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node vstavi(Node node, int value) {
|
||||||
|
if (node == null) {
|
||||||
|
return new Node(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == node.item.value) {
|
||||||
|
node.item.count++;
|
||||||
|
return node;
|
||||||
|
} else if (value < node.item.value) {
|
||||||
|
node.left = vstavi(node.left, value);
|
||||||
|
} else {
|
||||||
|
node.right = vstavi(node.right, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
node.height = 1 + Math.max(getHeight(node.left), getHeight(node.right));
|
||||||
|
|
||||||
|
return balance(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void najdi(int kljuc) {
|
||||||
|
traversal = new StringBuilder();
|
||||||
|
najdi(root, kljuc);
|
||||||
|
System.out.println(traversal.substring(0, traversal.length() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void najdi(Node node, int value) {
|
||||||
|
if (node == null) {
|
||||||
|
traversal.append("x").append(",");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == node.item.value) {
|
||||||
|
traversal.append(node.item.value).append(",");
|
||||||
|
return;
|
||||||
|
} else if (value < node.item.value) {
|
||||||
|
traversal.append(node.item.value).append(",");
|
||||||
|
najdi(node.left, value);
|
||||||
|
} else {
|
||||||
|
traversal.append(node.item.value).append(",");
|
||||||
|
najdi(node.right, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void izbrisi(int kljuc) {
|
||||||
|
izbrisi(root, kljuc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node izbrisi(Node node, int value) {
|
||||||
|
if (node == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value < node.item.value) {
|
||||||
|
node.left = izbrisi(node.left, value);
|
||||||
|
} else if (value > node.item.value) {
|
||||||
|
node.right = izbrisi(node.right, value);
|
||||||
|
} else {
|
||||||
|
if (node.item.count > 1) {
|
||||||
|
node.item.count--;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
Node tmp;
|
||||||
|
if (node.left == null) {
|
||||||
|
tmp = node.right;
|
||||||
|
return tmp;
|
||||||
|
} else if (node.right == null) {
|
||||||
|
tmp = node.left;
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = minValueNode(node.right);
|
||||||
|
node.item = tmp.item;
|
||||||
|
node.right = izbrisi(node.right, tmp.item.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
node.height = 1 + Math.max(getHeight(node.left), getHeight(node.right));
|
||||||
|
|
||||||
|
return balance(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void premiPregled() {
|
||||||
|
traversal = new StringBuilder();
|
||||||
|
if (root == null) {
|
||||||
|
System.out.println("empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
premiPregled(root);
|
||||||
|
System.out.println(traversal.substring(0, traversal.length() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void premiPregled(Node node) {
|
||||||
|
if (node == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
traversal.append(node.item).append(",");
|
||||||
|
premiPregled(node.left);
|
||||||
|
premiPregled(node.right);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void najnizjiSkupniPredhodnik(int a, int b) {
|
||||||
|
Node node = lca(root, a, b);
|
||||||
|
if (node == null) {
|
||||||
|
System.out.println("x");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.out.println(node.item.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node lca(Node node, int a, int b) {
|
||||||
|
if (node == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a < node.item.value && b < node.item.value) {
|
||||||
|
return lca(node.left, a, b);
|
||||||
|
} else if (a > node.item.value && b > node.item.value) {
|
||||||
|
return lca(node.right, a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void vsotaVMejah(int spodnjaMeja, int zgornjaMeja) {
|
||||||
|
int sum = sumBounds(root, spodnjaMeja, zgornjaMeja);
|
||||||
|
System.out.println(sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int sumBounds(Node node, int lower, int upper) {
|
||||||
|
if (node == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sum = 0;
|
||||||
|
if (node.item.value >= lower && node.item.value <= upper) {
|
||||||
|
sum += node.item.value * node.item.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum += sumBounds(node.left, lower, upper);
|
||||||
|
sum += sumBounds(node.right, lower, upper);
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ktiNajmanjsi(int indeks) {
|
||||||
|
Integer smallest = kSmallest(root, indeks);
|
||||||
|
if (smallest != null) {
|
||||||
|
System.out.println("x");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer kSmallest(Node node, int index) {
|
||||||
|
if (node == null) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
Integer k = kSmallest(node.left, index);
|
||||||
|
if (k == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
k -= node.item.count;
|
||||||
|
if (k <= 0) {
|
||||||
|
System.out.println(node.item.value);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return kSmallest(node.right, k);
|
||||||
|
}
|
||||||
|
}
|
16
naloga3/src/Main.java
Normal file
16
naloga3/src/Main.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
AVLDrevo tree = new AVLDrevo();
|
||||||
|
tree.vstavi(8);
|
||||||
|
tree.vstavi(3);
|
||||||
|
tree.vstavi(10);
|
||||||
|
tree.vstavi(1);
|
||||||
|
tree.vstavi(6);
|
||||||
|
tree.vstavi(14);
|
||||||
|
tree.vstavi(6);
|
||||||
|
tree.vsotaVMejah(3, 6);
|
||||||
|
tree.najdi(9);
|
||||||
|
tree.ktiNajmanjsi(2);
|
||||||
|
tree.najnizjiSkupniPredhodnik(1, 6);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user