Я столкнулся с интересной проблемой, называемой Большой проблемой списка деревьев. Проблема заключается в следующим образом:Программа рекурсии Великого Дерева
В заказанного бинарное дерево, каждый узел содержит один элемент данных и «небольшие» и «большие» указатели на суб-деревья .Все узлы в «малый «sub-tree меньше или равно данным в родительском узле. Все узлы в «большом» поддереве больше родительского узла. И круглый двунаправленный список состоит из previous и следующий указатели.
Задача состоит в том, чтобы взять упорядоченное двоичное дерево и переставить внутренние указатели, чтобы сделать из него круглый двунаправленный список. «небольшого» указатель должен играть роль «предыдущего» и «большого» указатель должен играть роль «следующего». Список должен быть организован так, чтобы узлы находились в порядке возрастания. Я должен написать рекурсивную функцию. & Верните указатель на новый список.
Операция должна выполняться в режиме O (n).
Я понимаю, что рекурсия пойдет по дереву, но как рекурсивно изменить малые и большие поддеревья в списки, также мне нужно добавить эти списки вместе с родительским узлом.
Как я должен подойти к проблеме? .. Мне просто нужно руководство для решения проблемы !.
так что «упорядоченное двоичное дерево» почти похоже на BST? – Fallen
Рекурсивный обход в порядке должен работать нормально. Просто не забудьте сохранить указатель на правое поддерево, прежде чем посещать (изменять) сам узел. Я предполагаю, что это будет O (n), но объем памяти может стать довольно плохим. (особенно если вы используете ограниченный стек) –
Решение здесь: http://cslibrary.stanford.edu/109/TreeListRecursion.html – Tarik