Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions students/23K0346/23K0346-p31_31/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>23K0346</artifactId>
<groupId>ru.mirea.practice</groupId>
<version>2024.1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>23K0346-p31_31</artifactId>
<description>Массивы</description>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.mirea.practice.s0000001.tasks;

class Node {
int key;
Node left;
Node right;

public Node(int key) {
this.key = key;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package ru.mirea.practice.s0000001.tasks;

public class ProcessorTree {
private Node root;

public void add(int key) {
root = addRecursive(root, key);
}

private Node addRecursive(Node node, int key) {
if (node == null) {
return new Node(key);
}
if (key < node.key) {
node.left = addRecursive(node.left, key);
} else if (key > node.key) {
node.right = addRecursive(node.right, key);
} else {
System.out.println("Key " + key + " already exists.");
}
return node;
}

public void delete(int key) {
root = deleteRecursive(root, key);
}

private Node deleteRecursive(Node node, int key) {
if (node == null) {
System.out.println("Key " + key + " not found.");
return null;
}
if (key < node.key) {
node.left = deleteRecursive(node.left, key);
} else if (key > node.key) {
node.right = deleteRecursive(node.right, key);
} else {
if (node.left == null && node.right == null) {
return null;
} else if (node.left == null) {
return node.right;
} else if (node.right == null) {
return node.left;
} else {
Node smallestValue = findSmallestValue(node.right);
node.key = smallestValue.key;
node.right = deleteRecursive(node.right, smallestValue.key);
}
}
return node;
}

private Node findSmallestValue(Node node) {
return node.left == null ? node : findSmallestValue(node.left);
}

public void printVariant1() {
if (root == null) {
System.out.println("Tree is empty.");
return;
}
int height = getHeight(root);
for (int level = height; level >= 1; level--) {
printLevel(root, level);
}
System.out.println();
}

public void printVariant2() {
if (root == null) {
System.out.println("Tree is empty.");
return;
}
int height = getHeight(root);
for (int level = 1; level <= height; level++) {
printLevel(root, level);
}
System.out.println();
}

public void printVariant3() {
printVariant3Recursive(root);
System.out.println();
}

private void printVariant3Recursive(Node node) {
if (node != null) {
printVariant3Recursive(node.left);
System.out.print(node.key + " ");
printVariant3Recursive(node.right);
}
}

public void printVariant6() {
if (root == null) {
System.out.println("Tree is empty.");
return;
}
int height = getHeight(root);
for (int level = 1; level <= height; level++) {
System.out.print("Level " + level + ": ");
printLevel(root, level);
System.out.println();
}
}

private int getHeight(Node node) {
if (node == null) {
return 0;
}
return Math.max(getHeight(node.left), getHeight(node.right)) + 1;
}

private void printLevel(Node node, int level) {
if (node == null) {
return;
}
if (level == 1) {
System.out.print(node.key + " ");
} else if (level > 1) {
printLevel(node.left, level - 1);
printLevel(node.right, level - 1);
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package ru.mirea.practice.s0000001.tasks;

import java.util.Scanner;

public final class ProcessorTreeApp {
private ProcessorTreeApp() {
throw new UnsupportedOperationException("Utility class");
}

public static void main(String[] args) {
ProcessorTree tree = new ProcessorTree();

try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.println("Menu:");
System.out.println("1 - Add node");
System.out.println("2 - Delete node");
System.out.println("3 - Print variant 1 (bottom to top, left to right)");
System.out.println("4 - Print variant 2 (top to bottom, left to right)");
System.out.println("5 - Print variant 3 (left, root, right)");
System.out.println("6 - Print variant 6 (levels with level numbers)");
System.out.println("7 - Exit");
System.out.print("Enter command: ");
int command = scanner.nextInt();

switch (command) {
case 1:
System.out.print("Enter key to add: ");
int keyToAdd = scanner.nextInt();
tree.add(keyToAdd);
break;

case 2:
System.out.print("Enter key to delete: ");
int keyToDelete = scanner.nextInt();
tree.delete(keyToDelete);
break;

case 3:
tree.printVariant1();
break;

case 4:
tree.printVariant2();
break;

case 5:
tree.printVariant3();
break;

case 6:
tree.printVariant6();
break;

case 7:
System.out.println("Exiting program.");
return;

default:
System.out.println("Invalid command.");
break;
}
}
} catch (Exception e) {
System.out.println("An error occurred: " + e.getMessage());
}
}
}
1 change: 1 addition & 0 deletions students/23K0346/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<module>23K0346-p29</module>
<module>23K0346-p30.1</module>
<module>23K0346-p30.2</module>
<module>23K0346-p31_31</module>
<module>23K0346-p32</module>
</modules>
</project>
Loading