//修改后,那是否正确?那位大侠能把这段代码改改正确,向你学习.
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编辑过]