2013-03-19 10 views
3

Я хочу найти самый длинный путь в двоичном дереве. Я планирую добавить их в список, таким образом, я могу сказать, что мой вражеский персонаж должен пройти длинный путь в удобном режиме.Поиск самого длинного пути в двоичном дереве

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, так что я могу добавить узлы в мой список?

+1

звучит как домашнее задание/задания. – Raptor

+0

Если вы написали двоичный древовидный класс, вы можете сохранить его высоту и ширину, иногда полезно определить, какой тип поиска использовать. – Serdalis

+2

Вам нужно определить «путь». Вы имеете в виду путь от корня до листьев? Или вы имеете в виду самый длинный путь от какого-то листа до любого другого листа? Есть большая разница. – Gene

ответ

7

Самый длинный путь в дереве, называется «диаметр». Вы можете увидеть реализацию алгоритма здесь: http://www.geeksforgeeks.org/diameter-of-a-binary-tree/

+0

Самый длинный путь не такой же, как диаметр. – Vinay

+2

@Vinay: Диаметр дерева - самый длинный путь! –

+0

Путь @MajidDarabi в дереве - это непрерывная последовательность узлов, которая может быть пройдена только с помощью указателей (на левый и правый листья), диаметр - это не путь! – vladon

Смежные вопросы