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