function generateTrees return a list of trees according to input n, and
function TreeCopy copy and return a new node where each child and the root itself is added by input n

in GenerateBST:
ii is the root value, it ranges from 1 to n
then it uses two for loops to get all possible left and right sub-trees.
for left sub-tree, simply copy it without adding any value
for right sub-tree, the structure is correct but you need to add certain value to each of the node, according to the root value