Я несколько смущен между логикой вычисления высоты двоичного дерева.Confused - Высота двоичного дерева
Код 1
public static int findHeight(Tree node) {
if(node == null)
return 0;
else {
return 1+Math.max(findHeight(node.left), findHeight(node.right));
}
}
Код 2
public static int findHeight(Tree node) {
if(node == null)
return -1;
else {
return 1+Math.max(findHeight(node.left), findHeight(node.right));
}
}
Я думаю, второй является правильным, так как он дает правильный ответ на код ниже: -
Tree t4 = new Tree(4);
Tree t2 = new Tree(2);
Tree t1 = new Tree(1);
Tree t3 = new Tree(3);
Tree t5 = new Tree(5);
t4.left = t2;
t4.right = t5;
t2.left = t1;
t2.right = t3;
// Prints "Height : 2" for Code 2
// Prints "Height : 3" for Code 1
System.out.println("Height : " + findHeight(t4));
Я confus ред, потому что многие из других SO ответов показывает логику для вычисления высоты в соответствии с Кодексом 1
Противоречивые логик
UPDATE:
All , У меня есть основное сомнение относительно того, что точно высотой дерева?
1. Не является ли это узлом между корнем и самым глубоким узлом дерева (включая оба - корень & самый глубокий узел)?
2. Разве это не ребро между корнем и самым глубоким узлом дерева?
ИЛИ
3. Является ли это просто вопрос реализации каждого человека - Оба подхода являются правильными?
Но нет никаких вопросов .. – Maroun
Проверьте обновление! – tmgr
Это совершенно произвольное определение. Вы хотите, чтобы высота была числом ребер или количеством узлов? Пока вы согласны, все будет работать. – Teepeemm