forked from ex01tus/yandex-algorithms-course
-
Notifications
You must be signed in to change notification settings - Fork 0
/
BinarySearchTreeInsert.java
87 lines (72 loc) · 2.63 KB
/
BinarySearchTreeInsert.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package sp5.trees;
/**
* Дано BST. Надо вставить узел с заданным ключом. Ключи в дереве могут повторяться.
* На вход функции подаётся корень корректного бинарного дерева поиска и ключ, который надо вставить в дерево.
* Осуществите вставку этого ключа. Если ключ уже есть в дереве, то его дубликаты уходят в правого сына.
* Таким образом вид дерева после вставки определяется однозначно.
*
* Функция должна вернуть корень дерева после вставки вершины.
*/
public class BinarySearchTreeInsert {
public static Node insert(Node root, int key) {
insertKey(root, key);
return root;
}
public static void insertKey(Node current, int key) {
if (current.value > key) {
insertLeft(current, key);
} else {
insertRight(current, key);
}
}
private static void insertLeft(Node current, int key) {
if (current.left != null) {
insertKey(current.left, key);
} else {
current.left = new Node( null, null, key);
}
}
private static void insertRight(Node current, int key) {
if (current.right != null) {
insertKey(current.right, key);
} else {
current.right = new Node(null, null, key);
}
}
public static void main(String[] args) {
Node node1 = new Node(null, null, 7);
Node node2 = new Node(node1, null, 8);
Node node3 = new Node(null, node2, 7);
Node newHead = insert(node3, 6);
System.out.println(newHead.value); // 7
System.out.println(newHead.getLeft().getValue()); // 6
}
private static class Node {
private int value;
private Node left;
private Node right;
Node(Node left, Node right, int value) {
this.left = left;
this.right = right;
this.value = value;
}
public int getValue() {
return value;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public void setValue(int value) {
this.value = value;
}
}
}