Я пытаюсь написать метод, который будет вычислять наибольшее количество ребер, принятых для получения от корня до самого удаленного узла.
public static int depth(Tree t) {
if(t == null) return 0;
else return 1 + Math.max(depth(t.left), depth(t.right));
}
Метод должен показать ответ 3 для этого дерева, однако в настоящее время он дает результат 4, поскольку он подсчитывает узлы, а не ребра, поэтому подсчитывает исходный корень. Как я могу изменить это, чтобы дать правильный результат?
Оберните свой рекурсивный метод внешним методом, который проверяет 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));
}
if (t == null || t.left == null && t.right == null) { return 0; }
тогда. Одна большая проблема заключается в том, что вы считаете, что пустое дерево имеет ту же глубину, что и дерево с 1 узлом.
93
и41
глубиной 4, а корневой узел - глубиной 1.