public List<TreeNode> generateTrees(int n) {
    	if(n<0) return null;
    	myele []Trees =new  myele[n+1];
   	 	if(n==0) {myele t= new myele();t.add(null);return t.value;}
    	Trees[1] = new myele(1);
    	if(n==1){return Trees[1].value;}
    	
		TreeNode root;
		for(int i=2;i<=n;i++)
		{
			Trees[i] = new myele();
			for(TreeNode node:Trees[i-1].value)
			{
				//其余的树作为右子树插入
				 root = new TreeNode(i);
				 root.left = copy(node);
				 Trees[i].add(root);
				  
				 {
					 //i为单节点插入到 i-1中
					 TreeNode temp =  copy(node);
					 AddTree(temp, i);
					 Trees[i].add(temp);
				 }
			}
		 
		  //i为父节点，j 到 i-1 作为子节点 插入到  j-1 对应的子树中去
		  for(int j=i-1;j>1;j--)
		  {
				for(TreeNode temp:Trees[j-1].value)
				{
					int Margin = j-1;
					for(TreeNode temp2:CreateTree(Trees[i-j].value, Margin))
					{
						 root = new TreeNode(i);
						 TreeNode temp3 = copy(temp);
						 AddTree(temp3, root);
						 root.left = temp2;
						 Trees[i].add(temp3);
					}
				}
		  	 }
			 
		 }
    	
    	return Trees[n].value;
    }