Я хочу найти самый длинный путь в двоичном дереве. Я планирую добавить их в список, таким образом, я могу сказать, что мой вражеский персонаж должен пройти длинный путь в удобном режиме.Поиск самого длинного пути в двоичном дереве
private static <T> ArrayList<T> depthFirstSearch(BinaryNode<T> node)
{
if(node != null)
{
Stack<BinaryNode<T>> stack = new Stack<BinaryNode<T>>();
stack.push(node);
while(!stack.isEmpty())
{
BinaryNode<T> currentNode = stack.pop();
if(currentNode.right != null)
stack.push(currentNode.right);
// We want to visit left child first, so push left node last.
if(currentNode.left != null)
stack.push(currentNode.left);
}
}
}
Я написал этот код, но это беспорядок. Я пытаюсь использовать DFS, чтобы найти самый длинный путь. Какие-либо предложения?
EDIT: У меня есть высота дерева, я могу получить его, используя это.
public static <T> int height(BinaryNode<T> t)
{
if (t == null)
return -1;
else
return 1 + Math.max(height(t.left), height(t.right));
}
Мой вопрос: , когда я знаю, что я нашел самый длинный путь с помощью DFS, так что я могу добавить узлы в мой список?
звучит как домашнее задание/задания. – Raptor
Если вы написали двоичный древовидный класс, вы можете сохранить его высоту и ширину, иногда полезно определить, какой тип поиска использовать. – Serdalis
Вам нужно определить «путь». Вы имеете в виду путь от корня до листьев? Или вы имеете в виду самый длинный путь от какого-то листа до любого другого листа? Есть большая разница. – Gene