У меня есть вопрос ниже, но мне трудно разобраться в этом и реализовать его на PHP.
У вас есть двоичное дерево с N узлов (1 <= N <= 100000) пронумерованы от 0 в N — 1, каждый помечен каким-то целым числом.
Вы должны ответить Q (1 <= Q <= 75000) запросы, каждый из которых обозначен некоторым узлом (некоторое целое число от 0 до N — 1).
Ответом на каждый запрос является наибольшая разница между метками, которые вы найдете в пути от данного узла к корню дерева, который всегда будет узлом 0. N будет дано в первой строке ввода. N строк следуют за я-я строка описывает данные я-я узел дерева (первая строка описывает узел 0 и т. д.) с 3 целыми числами: метка, левый потомок, правый потомок. Отсутствие любого из детей будет обозначаться -1. Затем строка с целым числом Q, за которой следуют Q строк, каждая из которых представляет собой отдельный запрос, как описано выше.
Случай 1:
Для ввода предусмотрено следующее:
3
10 1 2
12 -1 -1
15 -1 -1
2
1
2
Выход программы будет:
2
5
Случай 2:
Для ввода предусмотрено следующее:
3
10 1 -1
15 2 -1
20 -1 -1
2
1
2
Выход программы будет:
5
10
Получение этой максимальной разницы, например, для случая 2,
Я бы сказал, что результат для запроса два будет 5, потому что из данных у моего двоичного дерева есть 10 (корень), затем узел 15 слева от корня, затем узел 20 слева от 15, так что 20-15 такое же, как 15-10, что делает их обоих 5. Не понимаю ли я что-то здесь или что-то … Любые идеи приветствуются.
Принимать во внимание все узлы между корень а также данный узел
Для ввода предусмотрено следующее:
3
10 1 -1
15 2 -1
20 -1 -1
1
2
Выход программы будет:
10
вы получаете путь 10-15-20
ты должен пойти с
max(10,15,20) - min(10,15,20) => 10
Для ввода предусмотрено следующее:
7
33 1 5
11 2 -1
27 3 6
87 4 -1
3 -1 -1
666 -1 -1
6666 -1 -1
1
4
Выход программы будет:
84
Вы получаете более длинную цепь 33-11-27-87-3
ты получаешь
max(33,11,27,87,3) - min(33,11,27,87,3) => 87-3 => 84
Других решений пока нет …