-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSimpleTree.java
More file actions
143 lines (123 loc) · 4.35 KB
/
SimpleTree.java
File metadata and controls
143 lines (123 loc) · 4.35 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import java.util.*;
class SimpleTreeNode<T>{
public T NodeValue; // значение в узле
public SimpleTreeNode<T> Parent; // родитель или null для корня
public List<SimpleTreeNode<T>> Children; // список дочерних узлов или null
public boolean haveChild = false;
public SimpleTreeNode(T val, SimpleTreeNode<T> parent)
{
NodeValue = val;
this.Parent = parent;
Children = new ArrayList<>();
}
}
public class SimpleTree<T> {
public SimpleTreeNode<T> Root; // корень, может быть null
public int count;
public List<SimpleTreeNode<T>> values = new ArrayList<>();
public SimpleTree(SimpleTreeNode<T> root) {
this.Root = root;
count = 1;
}
public void AddChild(SimpleTreeNode<T> ParentNode, SimpleTreeNode<T> NewChild) {
// ваш код добавления нового дочернего узла существующему ParentNode
ParentNode.Children.add(NewChild);
count++;
ParentNode.haveChild = true;
if (ParentNode == Root) {
NewChild.Parent = Root;
} else {
NewChild.Parent = ParentNode;
}
}
public void DeleteNode(SimpleTreeNode<T> NodeToDelete) {
// ваш код удаления существующего узла NodeToDelete
if (NodeToDelete == Root) {
Root = null;
} else {
NodeToDelete.Parent.Children.remove(NodeToDelete);
}
count--;
}
public List<SimpleTreeNode<T>> GetAllNodes() {
List<SimpleTreeNode<T>> listOfNodes = new ArrayList<>();
GetAllNodesRec(Root, listOfNodes);
return listOfNodes;
}
public void GetAllNodesRec(SimpleTreeNode<T> node, List<SimpleTreeNode<T>> list) {
list.add(node);
for (SimpleTreeNode<T> node1 : node.Children) {
if (node1.haveChild) {
GetAllNodesRec(node1, list);
} else
list.add(node1);
}
}
public List<SimpleTreeNode<T>> FindNodesByValue(T val) {
// ваш код поиска узлов по значению
List<SimpleTreeNode<T>> list = new ArrayList<>();
for (SimpleTreeNode<T> nod : GetAllNodes()) {
if (nod.NodeValue.equals(val)) {
list.add(nod);
}
}
return list;
}
public void MoveNode(SimpleTreeNode<T> OriginalNode, SimpleTreeNode<T> NewParent) {
// ваш код перемещения узла вместе с его поддеревом --
// в качестве дочернего для узла NewParent
if (OriginalNode == Root) {
return;
}
OriginalNode.Parent.Children.remove(OriginalNode);
if (OriginalNode.Parent.Children.size() == 0) {
OriginalNode.Parent.haveChild = false;
}
OriginalNode.Parent = null;
NewParent.Children.add(OriginalNode);
NewParent.haveChild = true;
}
public void printTree(List<SimpleTreeNode<T>> list) {
for (SimpleTreeNode<T> nod : list) {
System.out.print(nod.NodeValue + " ");
}
System.out.println();
}
public int Count() {
// количество всех узлов в дереве
return count;
}
public int LeafCount() {
// количество листьев в дереве
int leafCount = 0;
for (SimpleTreeNode<T> nods : GetAllNodes()) {
if (nods.Children.size() == 0) {
leafCount++;
}
}
return leafCount;
}
public ArrayList<Integer> EvenTrees() {
// ...
ArrayList<Integer> list = new ArrayList<>();
for (SimpleTreeNode<T> nodes : GetAllNodes()) {
recCount(nodes);
if (((nums % 2) == 0) && (nums != 0) && (nodes != Root)) {
list.add((Integer) nodes.Parent.NodeValue);
list.add((Integer) nodes.NodeValue);
}
nums = 0;
}
return list;
}
public void recCount(SimpleTreeNode<T> node) {
nums++;
for (SimpleTreeNode<T> node1 : node.Children) {
if (node1.haveChild) {
recCount(node1);
} else {
nums++;
}
}
}
}