| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2584 人关注过本帖
标题:[求助]C#问题,递归十层深度,获取出森林的所有子结点,下面的代码对吗,总觉得 ...
取消只看楼主 加入收藏
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
 问题点数:0 回复次数:4 
[求助]C#问题,递归十层深度,获取出森林的所有子结点,下面的代码对吗,总觉得自己写的

//修改后,那是否正确?那位大侠能把这段代码改改正确,向你学习.
private int floor=10; //控制深度
private ArrayList altemp=new ArrayList(); //存放非零结点的集合
private void GetNode(long id) //递归体
{
long[] subid = new long[6]; //存放id的6个子节点
for(int i=0;i<6;i++) //赋0
{
subid[i]=0;
}
if(id==0) //如果id是未尾
{
floor = 0; //floor=0:那么就是最底层了,是末结点
return; //程序上返
}
else //当前id不是末结点
{
if (floor == 0) //当前已经是第10层,
{
return; //那么也返回
}
floor--; //否则那就将层数向下,
altemp.Add(id); //存取当前id值
GetFloorId(id,ref subid); //将id的6个下层id存到subid里 ,不好意思,注释掉是不对的.忘了付值
for (int i = 0; i < 6; i++) //依次遍历当前id的6个子id
{
if (subid[i] != 0 && floor<10) //当前不是末结点,并且是10层以内,那当然递归.
{
GetNode(subid[i]); //继续罗.
break;
}
}
}

}

private void GetFloorId(long id,ref subid) //得到子id,填充subid
{
subid=datatable.select("fatherid="+id);
return;
}


红色部分后来改上去的.
最后.altemp是否保存为所有的结点.这里的森林都是6"枝",应该叫6度吧,
请数据结构高手指教一下,感谢!

这个是死循环?怎么会?我的是遇零则止啊.

我修改后的,这样对了吗?

private int floor=10;
private ArrayList altemp=new ArrayList();
long[] subid = new long[6];
for(int i=0;i<6;i++)
{
subid[i]=0;
}
private void GetNode(long id,int depth)
{
if(id==0 )
{
return;
}
else
{
if (--depth == 0)
{
return;
}
altemp.Add(id);
GetFloorId(id,ref subid);
for (int i = 0; i < 6; i++)
{
if (subid[i] != 0)
{
GetNode(subid[i]);
break;
}
}
}

}

private GetFloorId(long id,ref long [] subid)
{
subid=DataSet.DataTable[0].select("fatherid="+id)
}

[此贴子已经被作者于2006-12-7 23:50:19编辑过]

搜索更多相关主题的帖子: 结点 递归 深度 森林 
2006-12-06 22:43
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
得分:0 
没想到响应这么热烈,谢谢大家给的回答,
private void GetFloorId(long id, ref long[] subid)
{
//获取出这个人下层的六个人信息存入subid

}
这些node的连接是靠id,fatherid两个字段关联的.
这个方法是从dataset.tables中取出或从数据库中取出下一层深度的六个id而己.没有太大的用处.
这些node是自己一个一个写到数据库中的.不是treeview上的.

我正想问呢.像这种程序怎么测试啊.

[此贴子已经被作者于2006-12-7 18:47:52编辑过]


2006-12-07 18:41
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
得分:0 
以下是引用舞雪在2006-12-7 16:05:41的发言:

偶用了goto语句,跳出了循环

怎么搞的?
贴出来让俺 学习学习吧.

这里是先写的一个方法.意义是从数据库中取出所有相关字段存到dataset中然后遍里这里面的datatable,获取出相关人员的id,在datatable中用id,fatherid进行了上层与下层的关联,保证一个上层对应6个下层.

[此贴子已经被作者于2006-12-7 20:05:22编辑过]


2006-12-07 20:00
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
得分:0 

大侠们,谢谢指教先,不过呢.学习别生气哈.
我嘛比你们那个都笨,写出了这么气人的东西.
再次表示感谢啊.



大家休息休息啊.


2006-12-07 23:02
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
得分:0 

这样修改对不?
private int floor=10;
private ArrayList altemp=new ArrayList();
long[] subid = new long[6];
for(int i=0;i<6;i++)
{
subid[i]=0;
}
private void GetNode(long id,int depth)
{
if(id==0)
{
return;
}
else
{
if (--depth == 0)
{
return;
}
altemp.Add(id);
GetFloorId(id,ref subid);
for (int i = 0; i < 6; i++)
{
if (subid[i] != 0)
{
GetNode(subid[i]);
break;
}
}
}

}

private GetFloorId(long id,ref long [] subid)
{
subid=DataSet.DataTable[0].select("fatherid="+id)
}


2006-12-07 23:41
快速回复:[求助]C#问题,递归十层深度,获取出森林的所有子结点,下面的代码对吗,总 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021067 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved