Так как это домашнее задание, я не буду давать вам полный ответ, но, надеюсь, достаточно, чтобы вы двигались.
Представьте, что у вас есть предварительный обход, скажем, этого дерева.
Обход дает вам 2-7-2-6-5-11-5 ... и т. Д. Обратите внимание, что 5 на самом деле является правильным потомком корня.
Очевидно, что вы не можете определить это, просто взглянув на числа, поэтому либо вам сообщат о структуре дерева, либо вам нужно будет сохранить некоторые дополнительные данные (т. Е. Является ли узел левым потомком или правильный ребенок, например).
Синтаксический анализ дерева - это просто рекурсивная функция, которая принимает прохождение предварительного заказа в качестве входных данных (подумайте о своей области действия, когда вы передаете входные данные). Как я упоминал ранее, к вашему обходу по предварительному заказу должны быть приложены некоторые дополнительные данные.
Эффективность:
учитывает, сколько раз каждый узел посещается при построении этого дерева, но также учитывает операцию чтения входных данных. Есть ли способ реорганизовать ввод быстрее, чем вы можете построить дерево? Какую структуру вы должны использовать, если вам нужно манипулировать данными.
По порядку: вам понадобится та же идея, чтобы пройти через это, поэтому я не буду ее освещать. Я уверен, что кто-то еще, если вы отчаянно нуждаетесь в этом.