made some small optimizations, replaced vector<Node*> with map<string, Node*> so traversing the tree can be performed faster, but it actually runs slower