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