2013-12-03 3 views
1

Пожалуйста, прочитайте мой вопрос, прежде чем сообщать об этом как дубликат. В литературе, чтобы найти минимальную высоту дерева, общий подход состоит в следующем:Поиск минимальной высоты двоичного дерева

int minDepth(TreeNode root) { 
    if (root == null) { return 0;} 
     return 1 + Math.min(minDepth(root.left), minDepth(root.right)); 
} 

Однако, я думаю, что он не различает между листом и узлом только с одним ребенком, и поэтому она возвращает Неверное значение. Например, если наше дерево выглядит следующим образом:

А Root

Б левого ребенок A

С является правильным ребенок B

М является левым потомком C

Эта функция возвращает одно в то время как лист 3 хмель от корня и поэтому высота мин 4.

так как это рекурсивная версия, как правило, су В литературе я думаю, что чего-то не хватает.

Может ли кто-нибудь очистить это для меня?

+0

Я думаю, что «литература» использует определение двоичного дерева, где каждый нелистовой узел имеет ровно двое детей. Кстати, я думаю, что ваш пример можно сократить до двух узлов A и B. –

+0

В двоичном дереве узел имеет 0, один или два ребенка. Для этого определения я вижу эту рекурсивную функцию для minHeight. – Nazgol

+0

Тогда каково определение «минимальной высоты»? –

ответ

0

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

Просто возьмите третье простейшее двоичное дерево, состоящее из двух узлов. Он имеет ровно один лист, его глубина - две, а минимальная глубина - также две. Но алгоритм, который вы указали, возвращает значение one. Таким образом, если авторы не используют другое определение для одного из терминов (например, «минимальная высота», означающая «кратчайший путь из дерева»/«кратчайший путь к нулевому указателю»), результат просто неверен.

+0

Может кто-нибудь, пожалуйста, покажет мне алгоритм, который вернет 4 вместо 1 ..., если входной сигнал двоичного дерева выглядит следующим образом: 100, 50, 70, 60 ?? – Jatin

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