Последний раз редактировалось Circiter 01.02.2012, 02:01, всего редактировалось 1 раз.
Ну хорошо, чтобы не тянуть кота за хвост, намечу один из возможных путей для решения вашей задачки.
Допустим, вы написали код для обхода двоичного дерева в прямом порядке. Этот алгоритм можно немного переделать, а именно, вместо того, чтобы выводить узлы существующего дерева мы будем эти узлы создавать -- сначала корень, потом (рекурсивно) левое поддерево, затем правое поддерево. Обязательно в таком порядке, т.е. сверху-вниз и слева-направо.
Этот алгоритм будет строить пустое полное дерево, но нам нужно его ещё и заполнять данными из входной строки. Для этого достаточно к коду создания каждого узла добавить ещё и код чтения очередного символа входной последовательности, а как только символы закончатся, построение дерева следует завершить.
Вам останется потом обойти полученное дерево двуми другими способами, о которых вы сами мне подробно рассказали (каждый из них получается из другого перестановкой пары строчек, ровно как и в словесных их формулировках).
Итак, вам нужно написать обычную функцию (прямого) обхода дерева и модифицировать её так, чтобы она не печатала дерево, а наоборот, считывала его и создавала узлы в памяти. Если есть затруднения с написанием самого C-кода, напишите все, что сможете и выложите здесь, тогда можно будет пытаться помогать дальше.
P.S.: Я мог что-то и упустить, давайте попробуем сначала этот способ, а потом может быть ещё кто-нибудь чего-нибудь ценного да и подскажет.
|