Apply trees On Terrain By Script

i am trying to make a script which can save the position of the trees which has been painted on terrain and can apply it in some other project

it is still in building phase and i am unable to apply trees on a terrain here i need help
i can not find any solution of how i can apply trees on terrain while i have only its position
Help here would be appreciated
Thanks AR

Here is my code f

void Save_tress()
	{
		Prototype_1_position.Clear();
		Prototype_2_position.Clear();
		Prototype_3_position.Clear();
		Prototype_4_position.Clear();

	Terrain[]	terrian_save = (Terrain[]) GameObject.FindObjectsOfType(typeof(Terrain));

		foreach(Terrain Terra in terrian_save)
		{
			My_trees = Terra.terrainData.treeInstances;
			
			
			foreach (TreeInstance tre in My_trees)
			{
				

				
				if(tre.prototypeIndex == 0 )
				{
					float x = Terra.terrainData.size.x * tre.position.x ;
					float y = Terra.terrainData.size.y * tre.position.y ;
					float z = Terra.terrainData.size.z * tre.position.z ;
					
					x = x + Terra.transform.position.x ;
					y = y + Terra.transform.position.y ;
					z = z + Terra.transform.position.z ;
					
					Vector3 abc = new Vector3(x,y,z);
						Prototype_1_position.Add(abc);
					
				}
				if(tre.prototypeIndex == 1 )
				{
					float x = Terra.terrainData.size.x * tre.position.x ;
					float y = Terra.terrainData.size.y * tre.position.y ;
					float z = Terra.terrainData.size.z * tre.position.z ;
					
					x = x + Terra.transform.position.x ;
					y = y + Terra.transform.position.y ;
					z = z + Terra.transform.position.z ;
					
					Vector3 abc = new Vector3(x,y,z);
						Prototype_2_position.Add(abc);
					
				}
				if(tre.prototypeIndex == 2 )
				{
					float x = Terra.terrainData.size.x * tre.position.x ;
					float y = Terra.terrainData.size.y * tre.position.y ;
					float z = Terra.terrainData.size.z * tre.position.z ;
					
					x = x + Terra.transform.position.x ;
					y = y + Terra.transform.position.y ;
					z = z + Terra.transform.position.z ;
					
					Vector3 abc = new Vector3(x,y,z);
//						Prototype_3_position.Add(abc);
					
				}
				if(tre.prototypeIndex == 3 )
				{
//						Prototype_4_position.Add(abc);
						
				}
				if(tre.prototypeIndex == 4 )
				{
//				Prototype_5_position.Add(abc);
						
				}
				if(tre.prototypeIndex == 5 )
				{
//					Prototype_6_position.Add(abc);
					
				}
				
				Debug.Log(Prototype_1_position.Count);
				Debug.Log(Prototype_2_position.Count);
				Debug.Log(Prototype_3_position.Count);
			}
		}
		}

	void Apply_Trees()
	{
		Terrain[]	terrian_save = (Terrain[]) GameObject.FindObjectsOfType(typeof(Terrain));

		foreach(Terrain Terra in terrian_save)
		{ 
			foreach(Vector3 newPOs_1  in Prototype_1_position)
			{
				Instantiate(Tree_prefab_1 ,newPOs_1 ,Quaternion.identity);

			}
			foreach(Vector3 newPOs_2 in Prototype_2_position)
			{
				Instantiate(Tree_prefab_2 , newPOs_2 ,Quaternion.identity);
				
			}
			foreach(Vector3 newPOs_3  in Prototype_3_position)
			{
				Instantiate(Tree_prefab_3 , newPOs_3 ,Quaternion.identity);
				
			}
		}

	}

http://forum.unity3d.com/threads/how-to-place-trees-during-runtime.260253/

Use raycasts to spawn your trees at the perfect height.