| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2584 人关注过本帖
标题:[求助]C#问题,递归十层深度,获取出森林的所有子结点,下面的代码对吗,总觉得 ...
只看楼主 加入收藏
fququ
Rank: 1
等 级:新手上路
威 望:1
帖 子:181
专家分:0
注 册:2004-5-30
收藏
 问题点数:0 回复次数:28 
[求助]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
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
2006-12-07 00:10
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 

写得对不对,运行运行不就知道了?呵呵.


飘过~~
2006-12-07 00:20
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
[QUOTE]GetFloorId(id,ref subid);[/QUOTE]

这个函数是搞什么的

你的这些Node是TreeView里面的还是自定义的啊

呵呵,不愧是BC论坛
2006-12-07 06:28
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 
递归算法只要掌握了递归方式,每一步的算法以及递归的结束条件,其实是很简单的。
不是很了解你的需求,按照最简单的10层深度,满6叉森林的所有节点遍历:
pubilc class TreeNode
{
public TreeNode Child1;
public TreeNode Child2;
public TreeNode Child3;
public TreeNode Child4;
public TreeNode Child5;
public int Data;
public TreeNode()
{
}
}
public void GetNode(int deep,TreeNode Root)
{
if(deep==10)
{
if(Root!=null)
Console.Write(Root.Data.ToString());
return;
}
if(Root.Child1!=null)
{
GetNode(deep+1,Root.Child1);
}
if(Root.Child2!=null)
{
GetNode(deep+1,Root.Child1);
}
if(Root.Child3!=null)
{
GetNode(deep+1,Root.Child1);
}
if(Root.Child4!=null)
{
GetNode(deep+1,Root.Child1);
}
if(Root.Child5!=null)
{
GetNode(deep+1,Root.Child1);
}
if(Root.Child6!=null)
{
GetNode(deep+1,Root.Child1);
}
Console.Write(Root.Data.ToString());
}

以上程序没有进行上机测试,仅供参考

2006-12-07 11:26
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
楼上的请你按照楼主的思想走,不要自己讲自己的

呵呵,不愧是BC论坛
2006-12-07 13:07
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
以下是引用舞雪在2006-12-7 13:07:10的发言:
楼上的请你按照楼主的思想走,不要自己讲自己的

楼上的请你按照楼主的思维给出代码,不要讲别人的代码。

2006-12-07 14:31
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
6樓 7樓
將造成死循環

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-12-07 14:35
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
楼主是C#.NET 2003的代码吗?
发上来,让大家给你研究一下吧,偶想看一下你的全部代码,在发上来之前请写好代码注释

呵呵,不愧是BC论坛
2006-12-07 16:04
舞雪
Rank: 1
等 级:新手上路
威 望:1
帖 子:1786
专家分:0
注 册:2006-10-11
收藏
得分:0 
以下是引用chenjin145在2006-12-7 14:35:16的发言:
6樓 7樓
將造成死循環

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


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



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

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