💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 40 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и пояснения.
Вопрос 1 из 20
Сколько листьев в дереве?
Python Копировать
class Node:
def __init__(self, v, left=None, right=None):
self.v, self.left, self.right = v, left, right
root = Node(1,
Node(2, Node(4), Node(5)),
Node(3, None, Node(6)))
6
4
2
3
Вопрос 6 из 20
Какую последовательность напечатает прямой обход этого дерева?
Python Копировать
class Node:
def __init__(self, value, left=None, right=None):
self.v = value
self.left = left
self.right = right
root = Node(1,
Node(2, None, Node(4)),
Node(3, Node(5), None)
)
def walk(node):
if node is None:
return
print(node.v, end=' ')
walk(node.left)
walk(node.right)
walk(root)
1 2 4 3 5
2 4 1 5 3
4 2 5 3 1
1 3 5 2 4
Вопрос 7 из 20
Какую последовательность напечатает симметричный обход?
Python Копировать
tree = {
1: (2, 3),
2: (None, 4),
3: (5, None),
4: (None, None),
5: (None, None),
}
def inorder(v):
if v is None:
return
left, right = tree[v]
inorder(left)
print(v, end=' ')
inorder(right)
inorder(1)
4 2 1 5 3
4 2 5 3 1
2 4 1 5 3
1 2 4 3 5
Вопрос 9 из 20
Какой список получится после обхода дерева по уровням?
Python Копировать
from collections import deque
children = {
1: (2, 3),
2: (None, 4),
3: (5, None),
4: (None, None),
5: (None, None),
}
q = deque([1])
out = []
while q:
v = q.popleft()
out.append(v)
for child in children[v]:
if child is not None:
q.append(child)
print(out)
[1,2,3,4,5]
[1,2,4,3,5]
[4,2,5,3,1]
[1,3,5,2,4]
Вопрос 11 из 20
Какой путь пройдёт поиск числа 6?
Python Копировать
tree = {
8: (3, 10),
3: (None, 6),
6: (None, None),
10: (9, None),
9: (None, None),
}
node = 8
path = []
x = 6
while node is not None and node != x:
path.append(node)
left, right = tree[node]
node = left if x < node else right
if node is not None:
path.append(node)
print(path)
[8,3]
[8,10,9]
[8,3,6]
[3,6]
Вопрос 14 из 20
Корректно ли это дерево как двоичное дерево поиска, и почему?
Python Копировать
# Узел записан как (значение, левое поддерево, правое поддерево).
root = (
10,
(5, None, None),
(15, (6, None, None), (20, None, None)),
)
Нет, потому что листья должны быть больше корня
Да, потому что 6<15
Да, потому что у каждого узла не более двух детей
Нет, потому что 6 находится в правом поддереве 10, но меньше 10
Вопрос 16 из 20
Какова высота BST после вставки 1,2,3,4,5 в таком порядке без балансировки, если высота считается в узлах?
Python Копировать
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(node, value):
if node is None:
return Node(value)
if value < node.value:
node.left = insert(node.left, value)
else:
node.right = insert(node.right, value)
return node
def height(node):
return 0 if node is None else 1 + max(height(node.left), height(node.right))
root = None
for value in [1, 2, 3, 4, 5]:
root = insert(root, value)
print(height(root))
3
5
6
4