Обновление на основе комментария
В вашем примере дерево разбора может содержать узел оператора, подобный этому
(int) -> (ageArray) -> ([) -> (30) -> (]) -> (;)
Профессор ожидает что-то вроде
(intArray) -> (ageArray) -> (30)
Я думаю.
Вы делаете решение простым. Это не просто вопрос обхода вашего дерева и выбрасывания чего-то. AST представляют собой конструкции языка программы. Чтобы построить AST, сначала нужно спроектировать, как будет выглядеть AST.
Например, узел «IF» может быть спроектирован как имеющий элемент логического уравнения (это само по себе, вероятно, тоже дерево), дерево истинных операторов и дерево ложных операторов.
Вы должны спроектировать, как будут выглядеть все элементы, основываясь на языке, который вы компилируете. Если у вас есть такой дизайн, то часто используется лексер в дереве разбора для генерации AST.