Метод подсчета ребер от корня до самого дальнего узла дерева

1

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

public static int depth(Tree t) {
    if(t == null) return 0;
    else return 1 + Math.max(depth(t.left), depth(t.right));
}

Изображение 174551

Метод должен показать ответ 3 для этого дерева, однако в настоящее время он дает результат 4, поскольку он подсчитывает узлы, а не ребра, поэтому подсчитывает исходный корень. Как я могу изменить это, чтобы дать правильный результат?

  • 3
    Если у вас уже есть алгоритм для вычисления длины пути в терминах узлов, то такая же длина пути в терминах ребер всегда будет на 1 единицу меньше.
  • 0
    Ваш алгоритм считает конечные узлы 93 и 41 глубиной 4, а корневой узел - глубиной 1.
Показать ещё 1 комментарий
Теги:
recursion
tree
edges

1 ответ

1
Лучший ответ

Оберните свой рекурсивный метод внешним методом, который проверяет null дерево и вычитает его из результата:

public static int depth(Tree t) {
  return (t == null) ? 0 : calculateDepth(t) - 1;
}

private static int calculateDepth(Tree t) {
  if (t == null)
    return 0;
  else
    return 1 + Math.max(calculateDepth(t.left), calculateDepth(t.right));
}
  • 0
    Я рассмотрел это, но мне нужно вернуть 0, когда узел является нулевым
  • 2
    Я бы сделал проверку, if (t == null || t.left == null && t.right == null) { return 0; } тогда. Одна большая проблема заключается в том, что вы считаете, что пустое дерево имеет ту же глубину, что и дерево с 1 узлом.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню