递归转换为非递归使用比较
时间:2011-05-03 来源:陈高
1.1.1. 简介
ObservableCollection<E_Region> proviceList = new ObservableCollection<E_Region>();
E_Region regionTemp = new E_Region(); //
for (int i = 0; i < dt.Rows.Count; i++)
{
regionTemp = new E_Region();
regionTemp.RegionID = dt.Rows[i]["RegionID"].ToString();
regionTemp.RegionFather = dt.Rows[i]["RegionFather"].ToString();
regionTemp.RegionName = dt.Rows[i]["RegionName"].ToString();
regionTemp.RegionDescription = dt.Rows[i]["RegionDescription"].ToString();
FindRegion(regionTemp, region, proviceList); //
region = regionTemp;
}
/// <summary>
/// 递归加载数据
/// </summary>
/// <param name="temp">当前对象</param>
/// <param name="parent">父级对象</param>
/// <param name=" proviceList ">树形数据集合</param>
private void FindRegion(E_Region temp, E_Region parent, ObservableCollection<E_Region> proviceList )
{
if (temp.RegionFather == "0")
{
temp.ParentRegion = null;
proviceList.Add(temp);
}
else if (temp.RegionFather != parent.RegionFather)
{
if (temp.RegionFather == parent.RegionID)
{
parent.RegionItemView1.Add(temp);
temp.ParentRegion = parent;
}
else
{
FindRegion(temp, parent.ParentRegion);
}
}
else if (parent.RegionFather == parent.RegionFather)
{
temp.ParentRegion = parent.ParentRegion;
parent.ParentRegion.RegionItemView1.Add(temp);
}
}
采用非递归算法构造省市县树形结构,提高了效率,从以往的20秒多提高到现在的5秒。
1.1.4. 存在问题及改进
用递归算法分析问题、非递归算法解决问题,这种解决问题的方式比较难掌握,需要进一步的了解和研究。
相关阅读 更多 +