首页 新闻 会员 周边

求递归遍历函数

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-14 18:09
        private void DataIni()
        {
            List<ReCls> lst = new List<ReCls>();
            lst.Add(new ReCls() { id = "1", Name = "广东", ParerentId = "NULL" });
            lst.Add(new ReCls() { id = "2", Name = "深圳", ParerentId = "1" });
            lst.Add(new ReCls() { id = "3", Name = "惠州", ParerentId = "1" });
            lst.Add(new ReCls() { id = "4", Name = "罗湖区", ParerentId = "2" });
            lst.Add(new ReCls() { id = "5", Name = "福田区", ParerentId = "2" });
            lst.Add(new ReCls() { id = "6", Name = "龙岗区", ParerentId = "2" });
            lst.Add(new ReCls() { id = "7", Name = "惠阳区", ParerentId = "3" });
            lst.Add(new ReCls() { id = "8", Name = "龙门县", ParerentId = "3" });
            lst.Add(new ReCls() { id = "9", Name = "华强北", ParerentId = "5" });
            lst.Add(new ReCls() { id = "10", Name = "体育馆", ParerentId = "5" }
        }

        public class ReCls
        {
            public string id { get; set; }
            public string Name { get; set; }
            public string ParerentId { get; set; }
        }

求递归遍历函数,C#版的

1:指定任意节点,可以获得以此节点的所有下级

2:指定任意节点,可以获得以此节点的所有父节点,并带有层级

3:指定任意节点,获得此节点的层级

C#
Alvin的主页 Alvin | 小虾三级 | 园豆:828
提问于:2012-12-12 14:36
< >
分享
最佳答案
0

其实只要告诉一个当前节点的id,就都可以知道了

收获园豆:20
chenping2008 | 大侠五级 |园豆:9836 | 2012-12-12 16:13

是的,就是需要这个函数

Alvin | 园豆:828 (小虾三级) | 2012-12-12 16:37

@Alvin: 

static void Main(string[] args)
        {
            List<ReCls> childs = new List<ReCls>();
            Program.GetChilds("8",childs);
            List<ReCls> parents = new List<ReCls>();
            
            Program.GetParents("2", parents);
            if (parents.Count > 0)
                parents.RemoveAt(0);

            Console.WriteLine("2这个节点的层次:" + (parents.Count + 1));
            Console.ReadKey();
}

private static List<ReCls> list = Program.DataIni();

        private static List<ReCls> DataIni()
        {
            List<ReCls> lst = new List<ReCls>();
            lst.Add(new ReCls() { id = "1", Name = "广东", ParerentId = "NULL" });
            lst.Add(new ReCls() { id = "2", Name = "深圳", ParerentId = "1" });
            lst.Add(new ReCls() { id = "3", Name = "惠州", ParerentId = "1" });
            lst.Add(new ReCls() { id = "4", Name = "罗湖区", ParerentId = "2" });
            lst.Add(new ReCls() { id = "5", Name = "福田区", ParerentId = "2" });
            lst.Add(new ReCls() { id = "6", Name = "龙岗区", ParerentId = "2" });
            lst.Add(new ReCls() { id = "7", Name = "惠阳区", ParerentId = "3" });
            lst.Add(new ReCls() { id = "8", Name = "龙门县", ParerentId = "3" });
            lst.Add(new ReCls() { id = "9", Name = "华强北", ParerentId = "5" });
            lst.Add(new ReCls() { id = "10", Name = "体育馆", ParerentId = "5" });
            return lst;
        }

private static void GetChilds(string id,List<ReCls> c)
        {
            foreach (var item in list.Where(l => l.ParerentId == id))
            {
                c.Add(item);
                Program.GetChilds(item.id,c);
            }
        }

        private static void GetParents(string id,List<ReCls> p)
        {
            foreach (var item in list.Where(l => l.id == id))
            {
                p.Add(item);
                Program.GetParents(item.ParerentId, p);
            }
        }
chenping2008 | 园豆:9836 (大侠五级) | 2012-12-12 17:18

@chenping2008: 

不用Linq可吗?

Alvin | 园豆:828 (小虾三级) | 2012-12-12 17:49

@Alvin: 那就foreach(var item1 in list)

一个一个的判断

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-12 20:01
其他回答(1)
0

3个 函数 ?

Qlin | 园豆:2403 (老鸟四级) | 2012-12-12 16:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册