Как я могу нерекурсивно получить количество листовых узлов в двоичном дереве?

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


person andrewb    schedule 20.11.2012    source источник
comment
Сделайте нерекурсивную прогулку по дереву и посчитайте листья. Вы можете заменить рекурсию стеком, очередью или определением порядка.   -  person John Dvorak    schedule 20.11.2012
comment
Что ты имеешь в виду without using recursion? Любую рекурсивную функцию можно выполнять итеративно. Проблема все еще рекурсивная, хотя...   -  person beatgammit    schedule 20.11.2012
comment
Я посмотрю, как сделать нерекурсивную прогулку. Под рекурсией, я полагаю, я подразумеваю наличие метода, который вызывает сам себя.   -  person andrewb    schedule 20.11.2012
comment
Я придумал небольшое решение, основанное на простой прогулке по бинарному дереву - должен ли я опубликовать его в своем вопросе или просто предоставить его в качестве ответа? Ян, то, что вы сказали, вероятно, является достаточным ответом ... на самом деле довольно простой вопрос.   -  person andrewb    schedule 20.11.2012
comment
См. stackoverflow.com/a/547636/346048.   -  person Reuben Morais    schedule 20.11.2012
comment
@ReubenMorais Да, это похоже на то, что я написал, такой же процесс. Я только что заставил его вести подсчет каждого узла, который является листом.   -  person andrewb    schedule 20.11.2012
comment
@JanDvorak, я знаю, как заменить рекурсию очередью в этом вопросе; но мне интересно, как мы можем заменить его стеком или определить порядок. Не могли бы вы объяснить это подробнее? (Я думаю, что порядок в этом конкретном вопросе не важен, так как мы считаем листья, и нам не нужно знать порядок узлов, но в других вопросах бинарного дерева, которым может понадобиться порядок, как мы можем решить вопрос с стек или определенный порядок?)   -  person Hengameh    schedule 10.08.2015


Ответы (1)


person    schedule
comment
Спасибо за ответ. Я не знаю этого языка, я предполагаю, что это Obj-C или C++, не могли бы вы объяснить этот код? Я не могу проверить это, поэтому я не могу пометить это как ответ, пока это, по крайней мере, не имеет смысла для меня. - person andrewb; 30.01.2013
comment
то есть C. Предполагается, что тип структуры NODE был определен через typedef. Вы можете видеть его как некий объект со свойствами левого и правого потомков. Остальное довольно очевидно, если вы знаете любой другой язык программирования. - person stanm87; 29.08.2013