Просили об этом в недавнем интервью и были в тупике.Наименьший путь значения в двоичном дереве поиска
Учитывая двоичное дерево, где узлы содержат целые значения, найдите путь (вплоть до листьев), который суммируется до самого низкого значения.
Итак, начинайте с корня и прокладывайте весь путь вниз по глубине первой моды, пока не дойдете до листа и не добавите значения узлов на этом пути. Повторите все возможные пути к листьям.
Я был просто поражен количеством возможностей, которые могут быть. Но я пробовал делать dfs, добавляя значения по пути, пока не добрался до листа. Сохраняли путь и сумму в хэш-карте. Но тогда я не мог понять, как сбросить текущую сумму и пойти по другому пути к другому листу во второй раз.
Я предполагаю, что это будет включать какой-то цикл, как таковой, что, если у вас есть список, который хранит каждое значение для каждой итерации dfs? Как только он пересечет все узлы, вы можете просто захватить самую большую. Я помню, что мне нужно было знать, как найти это в моем классе структур данных, это было на C++, и я не могу сейчас вспомнить. – SomeStudent
Просто используйте рекурсивную реализацию, и стек «проведет» все необходимые вам данные. Но, идя таким образом, вы гарантируете полный обход, что является неоптимальным. Использование обхода BFS может остановить определенные пути в середине, но это сложнее в дизайне. – Amit
Вещь с dfs - она дойдет до конца и вернется обратно и найдет следующий неустановленный узел. Но мне нужно знать сумму на узле, который он расходится, чтобы найти следующий неустановленный узел, если я должен записать его как новый путь. Трудно объяснить словами, которые я предполагаю, но в основном dfs не работает, если не реализована некоторая умная память для запоминания в определенных узлах. –